`

dom读取xml与写入xml

阅读更多
今天笔试的java题:xml读出数据,并把读出来的数据写入一个新的xml中。。。(写入的新xml文件注意:[合格]与[不合法]的商品分为两个分节点,把在2010年7月5号之后的为[合格]的商品,并计算合格商品的总和。把在2010年7月5号之前的为[不合格]的商品,并计算合格商品的总和)

要读取的xml文件
<?xml version="1.0" encoding="utf-8"?>

<main>
        <user>admin</user>
        <vailddate>2010-7-11</vailddate> 

        <item>
             <nameNo>no1</nameNo>
             <product>黄果</product>
             <price>120</price>
             <date>2010-7-5</date>
        </item>

         <item>
             <nameNo>no2</nameNo>
             <product>苹果</product>

			 <price>67</price>
             <date>2010-6-21</date>
         </item>

          <item>
             <nameNo>no3</nameNo>
             <product>香蕉</product>
             <price>99</price>
             <date>2010-7-8</date>
         </item>
        
         <item>
             <nameNo>no4</nameNo>
             <product>梨子</product>
             <price>188</price>
             <date>2010-6-11</date>
        </item>

		 <item>
             <nameNo>no5</nameNo>
             <product>桃子</product>
             <price>55</price>
             <date>2010-9-18</date>
        </item>
        
		 <item>
             <nameNo>no6</nameNo>
             <product>西瓜</product>
             <price>36</price>
             <date>2010-10-8</date>
        </item>

		 <item>
             <nameNo>no7</nameNo>
             <product>草莓</product>
             <price>88</price>
             <date>2010-8-28</date>
        </item>

		 <item>
             <nameNo>no8</nameNo>
             <product>西红柿</product>
             <price>12</price>
             <date>2010-7-12</date>
        </item>

   </main>  


要写入的xml文件
<?xml version="1.0" encoding="GBK"?>

<products>

    <user></user>
    <vaiDate></vaiDate>

    <passProduct>
        <PassNo></PassNo>
        <PassName></PassName>
        <PassSumPrice></PassSumPrice>
        <PassDate></PassDate>
    </passProduct>

    <noPassProduct>
        <noPassNo></noPassNo>
        <noPassName></noPassName>
        <noPassSumPrice></noPassSumPrice>
        <noPassDate></noPassDate>
    </noPassProduct>

</products>


具体实现


import java.io.FileOutputStream;
import java.io.PrintStream;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.xerces.parsers.DOMParser;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;


  
public class DOMRederAndWrite   
{   
    public static void main( String[] args )    
    {   
      DOMRederAndWrite dom=new DOMRederAndWrite();
       //读xml
       Products pros=dom.getReaderXml("E://x.xml");
       //写xml
       dom.writeXml(pros, "E://new.xml");
    }
    
    //xml文件的读取
    public Products getReaderXml(String fileName){
       //用来在存放xml数据
       Products pros=new Products();  	
    	try{
    	
    	//获得dom解析器工厂
    	DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    	//构造DOM解析器的实例
        DocumentBuilder db = dbf.newDocumentBuilder();
        //开始解析文档,将XML文档转换成DOM树存入内存;
        Document doc=db.parse(fileName);
        //获取root节点;
        Element  els=doc.getDocumentElement();
        
        //DOMParser类封装了dom解析器工厂只能读
       /* DOMParser parser=new DOMParser();   
        parser.parse(fileName);
        Document d=parser.getDocument();
        Element  el=d.getDocumentElement();
        */
       // System.out.println(els+"-"+el);
        
        NodeList user=els.getElementsByTagName("user");
                 Element us=(Element)user.item(0);
                 String u=us.getFirstChild().getNodeValue();
                 pros.setMainUser(u);
                 
       NodeList vail=els.getElementsByTagName("vailddate");
                 Element va=(Element)vail.item(0);
                 String v=va.getFirstChild().getNodeValue();
                 pros.setVaildDate(v);
       
     // System.out.println(u+"  "+v);   
      
       NodeList list=els.getElementsByTagName("item");
                         for(int i=0;i<list.getLength();i++){
                             Element e=(Element)list.item(i);
                             List<String> lists=new ArrayList<String>();
                             
                                    NodeList name=e.getElementsByTagName("nameNo");
                                    String n=name.item(0).getFirstChild().getNodeValue(); 
                                    lists.add(n);
                                    
                                    NodeList product=e.getElementsByTagName("product");
                                    String p=product.item(0).getFirstChild().getNodeValue(); 
                                    lists.add(p);
                                    
                                    NodeList price=e.getElementsByTagName("price");
                                    String pri=price.item(0).getFirstChild().getNodeValue(); 
                                    lists.add(pri);
                                    
                                    NodeList date=e.getElementsByTagName("date");
                                    String ds=date.item(0).getFirstChild().getNodeValue(); 
                                    lists.add(ds);
                                    
                            pros.getLists().add(lists);
                          // System.out.println(n+"  "+p+"  "+pri+"   "+ds);   
                         }
    	    }catch(Exception e){
    		 e.printStackTrace();
    	 }
    	return pros;
     }
    
    //xml文件的写入
    public void writeXml(Products pro,String fileName){
    	
    	try{
        //要筛选的时间
        SimpleDateFormat sim=new SimpleDateFormat("yyyy-MM-dd"); 
        Date newDate=sim.parse("2010-7-5");
            
  //叠加合格与不合格商品合集
  String no="";
  String name="";
  float price=0;
  String date="";
  
  String failno="";
  String failname="";
  float failprice=0;
  String faildate="";
  //筛选2010-7-5之后的日期
  for(int j=0;j<pro.getLists().size();j++){
	       List ls=(ArrayList)pro.getLists().get(j);
	        Date oldDate=sim.parse(ls.get(3).toString());
	        //合格与不合格的商品
	        if(newDate.getTime()<oldDate.getTime()){
	        	 no=no+ls.get(0)+"  ";
          	     name=name+ls.get(1)+" ";
          	     price=price+Float.parseFloat(ls.get(2).toString());
          	     date=date+ls.get(3)+"  ";
          	     
	          }else{
	        	     failno=failno+ls.get(0)+"  ";
	        	     failname=failname+ls.get(1)+" ";
	        	     failprice=failprice+Float.parseFloat(ls.get(2).toString());
	        	     faildate=faildate+ls.get(3)+"  "; 
	          }
       }
  
System.out.println("[合格]的商品:"+no+"-"+name+"-"+price+"-"+date);
System.out.println("[不合格]的商品:"+failno+"-"+failname+"-"+failprice+"-"+faildate);
  //获得dom解析器工厂
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
  //构造DOM解析器的实例
  DocumentBuilder db = dbf.newDocumentBuilder();
  //创建一个新的xml文档
  Document newDoc=db.newDocument();
  //创建根结点
  Element  root=newDoc.createElement("products");
  //创建子结点
  Element  child=newDoc.createElement("passProduct");
  //创建子结点
  Element  noPassChild=newDoc.createElement("noPassProduct");
  //创建子结点
  Element users=newDoc.createElement("user");
          //user添加文本结点
          users.appendChild(newDoc.createTextNode(pro.getMainUser()));
  //创建子结点        
  Element vaildates=newDoc.createElement("vaiDate");
          //vaildates添加文本结点
          vaildates.appendChild(newDoc.createTextNode(pro.getVaildDate()));

//根结点下添加子结点          
root.appendChild(users);
root.appendChild(vaildates);
root.appendChild(child);
root.appendChild(noPassChild);

//设置子结点上的属性
// child.setAttribute("name","xiaoming");

 Element names=newDoc.createElement("PassName");
         names.appendChild(newDoc.createTextNode(name));
 
         Element nos=newDoc.createElement("PassNo");
         nos.appendChild(newDoc.createTextNode(no));
         
         Element prices=newDoc.createElement("PassSumPrice");
         prices.appendChild(newDoc.createTextNode(price+""));
         
         Element dates=newDoc.createElement("PassDate");
         dates.appendChild(newDoc.createTextNode(date));

//【合格】子结点下添加子结点         
child.appendChild(nos);
child.appendChild(names);
child.appendChild(prices);
child.appendChild(dates);

Element failNames=newDoc.createElement("noPassName");
failNames.appendChild(newDoc.createTextNode(failname));

Element failNos=newDoc.createElement("noPassNo");
failNos.appendChild(newDoc.createTextNode(failno));

Element failPrices=newDoc.createElement("noPassSumPrice");
failPrices.appendChild(newDoc.createTextNode(failprice+""));

Element failDates=newDoc.createElement("noPassDate");
failDates.appendChild(newDoc.createTextNode(faildate));

//【不合格】子结点下添加子结点         
noPassChild.appendChild(failNos);
noPassChild.appendChild(failNames);
noPassChild.appendChild(failPrices);
noPassChild.appendChild(failDates);

//在dom下添加根节点
newDoc.appendChild(root);
//创建一个xml字节输入流设置字符编号集
OutputFormat    format  = new OutputFormat( newDoc , "GBK" , true );  
//创建一个字符输入流
StringWriter  stringOut = new StringWriter(); 
//创建xml连续
XMLSerializer    serial = new XMLSerializer( stringOut, format );   
serial.asDOMSerializer();    
serial.serialize( newDoc.getDocumentElement() );   
//创建dom写入流
PrintStream ps = new PrintStream(new FileOutputStream(fileName));   
ps.println(stringOut.toString());

    	}catch(Exception e){
    		e.printStackTrace();
    	}
 }
    
}    


//存放读取xml文件中的数据   
class Products{
	
	private String mainUser;
	private String vaildDate;
 	private List<Object> lists=new ArrayList<Object>();
 	
	public String getMainUser() {
		return mainUser;
	}
	public void setMainUser(String mainUser) {
		this.mainUser = mainUser;
	}
	public String getVaildDate() {
		return vaildDate;
	}
	public void setVaildDate(String vaildDate) {
		this.vaildDate = vaildDate;
	}
	public List<Object> getLists() {
		return lists;
	}
	public void setLists(List<Object> lists) {
		this.lists = lists;
	}
} 	


  • 源码.rar (3.8 KB)
  • 描述: 所有相关文件
  • 下载次数: 20
分享到:
评论
2 楼 dl96200 2012-02-27  
辛苦了。。感谢感谢 啊
1 楼 kaven1989 2012-01-13  
太好了,楼主辛苦了

相关推荐

    利用DOM读写XML

    总结,DOM提供了一种强大且灵活的方式来读取和操作XML文档。通过创建DOMDocument对象,我们可以构建XML文档,通过遍历和查询DOM树,我们可以读取并修改XML文档的内容。在处理复杂的数据结构和需要动态更新XML时,DOM...

    dom4j读写xml文档实例

    它提供了简单且高效的API来读取、写入、修改以及操作XML。在这个实例中,我们将深入理解DOM4J库如何帮助我们处理XML文档,并通过实际操作来熟悉其核心功能。 XML(eXtensible Markup Language)是一种用于标记数据...

    Java DOM 生成XML

    Java DOM(Document Object Model)是一种基于树形结构的XML文档处理模型,它允许程序员通过对象接口来访问和操作XML文档的各个部分。DOM为XML文档提供了一种内存中的表示方式,使得开发人员可以方便地创建、修改和...

    dom4j以String的方式读取XML的内容,并给String的值赋值,写入XML中

    它支持XPath查询,可以方便地查找和操作XML结构。通过熟练掌握DOM4J,开发者可以快速实现XML的读写和修改任务,提高工作效率。在实际项目中,根据具体需求,还可以结合其他XML处理库如JDOM、SAX或StAX,以实现更优化...

    用DOM读写XML文件

    在本文中,我们将深入探讨如何使用DOM(Document Object Model)API来读取和写入XML文件。 DOM是一种标准,它提供了一种结构化的表示XML文档的方式,并允许程序和脚本通过API访问XML文档的各个部分。DOM将XML文档...

    pb下读写xml文件的例子.rar_pb_pb 读取xml_pb 读取xml文件_pb9 xml_pb下读写xml文件的例子

    总结,PowerBuilder 9为处理XML文件提供了强大的支持,通过XMLDocument对象和DOM解析器,我们可以轻松地读取、写入和操作XML数据。这些功能使PB9成为开发涉及XML的应用的理想工具,帮助开发者高效地完成数据交换和...

    DOMProject(通过DOM读取XML)

    **DOMProject(通过DOM读取XML)** 在IT领域,XML(eXtensible Markup Language)是一种被广泛用于存储和传输数据的标记语言。它的结构清晰,易于机器和人类阅读,使得XML成为Web服务和应用程序间交换数据的理想...

    使用dom4j对xml的读写

    DOM4J的读取操作主要通过`DocumentBuilder`和`Document`对象来完成。首先,我们需要创建一个`DocumentBuilder`实例,然后使用它解析XML文件,得到`Document`对象。例如: ```java SAXReader reader = new SAXReader...

    dom4j_XML.rar_DOM4J_dom4j xml java_java xml_读写xml

    7. **bis和dom4j读写xml文件.files**:这两个文件可能是辅助资源,如样式表或配置文件,用于增强HTML示例的展示效果,或者包含与DOM4J操作XML相关的其他信息。 掌握DOM4J对于Java开发者来说是非常有用的,因为它能...

    xmldom

    这个对象提供了许多方法和属性,使得我们能够对XML文档进行读取、写入、查询和修改。 1. **创建和加载XML文档** - `load()` 方法:用于加载XML文件到XMLDocument对象,允许从本地文件系统或URL加载。 - `...

    用dom解析xml文件

    DOM(Document Object Model)是一种基于XML和HTML的标准API,它将文档表示为一个树形结构,使得程序可以方便地访问和操作文档中的每一个元素。在处理XML文件时,DOM解析器会将整个XML文档加载到内存中,形成一个...

    java 操作XML 采用(dom+dom4j)读写源码 lib包

    DOM4J是一个非常流行的Java XML API,它扩展了DOM,提供了更方便的操作XML的功能。DOM4J不仅支持DOM,还支持SAX和STAX解析。 读取XML文件: ```java import org.dom4j.DocumentHelper; import org.dom4j.Document; ...

    java中dom4j读写XML

    在Java中,DOM4J提供了一种灵活的方式来操作XML文档,包括解析、遍历、修改节点以及序列化回XML字符串。 **DOM4J的基本概念:** 1. **Element(元素)**:XML文档中的每一个标签都是一个Element,它包含属性、文本...

    DOM操作XML,XPATH技术

    标题"DOM操作XML,XPATH技术"指的是在编程中处理XML文档时,使用Document Object Model (DOM) 和XPath两种主要技术。DOM是一种标准,用于表示XML和HTML文档的树形结构,它允许程序和脚本动态更新、添加、删除和查找...

    利用dom4j--读取xml文件

    DOM4J是Java中一个非常优秀的XML处理库,它提供了丰富的API,使得操作XML文件变得简单而高效。在本文中,我们将详细探讨如何利用DOM4J库来读取XML文件。 1. **安装DOM4J** 要使用DOM4J,首先需要将其添加到你的...

    DOM4J读取XML

    它提供了类似于DOM、SAX和JDOM的API,但又在其基础上进行了优化,使得在读取、写入、查询和修改XML文档时更加高效与便捷。本文将详细介绍如何使用DOM4J来读取XML文件中的信息。 ### DOM4J读取XML详解 #### 初始化...

    Java用DOM4J读取XML

    - **易用性**:DOM4J提供了一套直观且易于理解的API,使得开发者能够轻松地操作XML文档。 - **扩展性**:支持XPath和XSLT等功能,方便进行数据检索和转换。 - **全面性**:DOM4J支持完整的DOM和SAX API,同时兼容...

    DOM、SAX、JDOM、DOM4J读写xml文档

    1. **DOM读取XML**:使用`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`来创建解析器并解析XML。解析完成后,可以通过`getElementsByTagName`、`getElementById`等方法访问元素。 2. **DOM...

    dom4j 解析(读取) xml 节点数据

    它提供了简单而直观的方式来解析、创建、修改和操作XML数据。在本教程中,我们将深入探讨如何使用DOM4J解析(读取)XML节点数据,不受XML层级的限制。 首先,确保你已经下载了必要的依赖,即DOM4J库。通常,这将是...

Global site tag (gtag.js) - Google Analytics