Dom4j解析xml文件-操作节点和属性及写入其他xml文件

HTML+CSS技术学习  https://www.itkc8.com

引言

       上一篇把Dom4j遍历xml文件的所有节点和属性分享了一下,这篇我就简单明了的分享一下,对xml文件的各个节点及属性进行增、删、改的操作并写入新的或者保存到xml文件中,下边的代码很详细,注释很明了,大家一看即可了解。

测试的xml文件test2.xml

[java] view plaincopy

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <root>   
  4.   <user editor="chenleixing" date="2015-02-15">   
  5.     <name>张三</name>   
  6.   </user>    
  7. </root>  


创建File对象获取Document和根节点

[java] view plaincopy

  1.        /** 
  2.  * 获取文件的document对象,然后获取对应的根节点 
  3.  * @author chenleixing 
  4.  */  
  5. @Test  
  6. public void testGetRoot() throws Exception{  
  7.     SAXReader sax=new SAXReader();//创建一个SAXReader对象  
  8.     File xmlFile=new File("d:\\test2.xml");//根据指定的路径创建file对象  
  9.     Document document=sax.read(xmlFile);//获取document对象,如果文档无节点,则会抛出Exception提前结束  
  10.     Element root=document.getRootElement();//获取根节点  
  11.     //this.getNodes(root);//从根节点开始遍历所有节点  
  12.     this.editAttribute(root,"user");//对指定名字的节点进行属性的添加删除修改  
  13.     this.addNode(root,"newNode","新增节点的内容");//对指定的节点新增名为newNode的子节点,并指定新增字节的内容  
  14.     this.saveDocument(document, xmlFile);//把改变的内存中的document真正保存到指定的文件中  
  15. }  


注意这三个方法:

[java] view plaincopy

  1. this.editAttribute(root,"user");//对指定名字的节点进行属性的添加删除修改  
  2. this.addNode(root,"newNode","新增节点的内容");//对指定的节点新增名为newNode的子节点,并指定新增字节的内容  
  3. this.saveDocument(document, xmlFile);//把改变的内存中的document真正保存到指定的文件中  

下边会依依介绍和展现。

对指定节点进行属性的添加删除和修改

       此处传入根节点和名为user的节点如最开始的调用this.editAttribute(root,"user"):

[java] view plaincopy

  1.        /** 
  2.  * 对指定的节点属性进行删除、添加、修改 
  3.  * @author chenleixing 
  4.  */  
  5. public void editAttribute(Element root,String nodeName){  
  6.       
  7.     //获取指定名字的节点,无此节点的会报NullPointerException,时间问题不做此情况的判断与处理了  
  8.     Element node=root.element("user");  
  9.     Attribute attr=node.attribute("editor");//获取此节点指定的属性,无此节点的会报NullPointerException  
  10.     node.remove(attr);//删除此属性  
  11.       
  12.     Attribute attrDate=node.attribute("date");//获取此节点的指定属性  
  13.     attrDate.setValue("更改");//更改此属性值  
  14.       
  15.     node.addAttribute("add","增加");//添加的属性  
  16. }  


对指定节点添加子节点和对应的文本内容

       此方法传入根节点,名为newNode的新增节点和对应的新增内容,如开头代码this.addNode(root,"newNode","新增节点的内容"):

[java] view plaincopy

  1.        /** 
  2.  * 对指定的节点添加子节点和对象的文本内容 
  3.  * @author chenleixing 
  4.  */  
  5. public void addNode(Element node,String nodeName,String content){  
  6.     Element newNode=node.addElement(nodeName);//对指定的节点node新增子节点,名为nodeName  
  7.     newNode.setText(content);//对新增的节点添加文本内容content  
  8. }  


保存改变的Document到新文件或源文件

        以上对节点的添加、属性的修改都是还停留在内存当中,还未真正保存到文件里即原文件里的内容至此还未发生变化,等把内存的document的内容写入到对应文件里才可以,如下边代码所示:

[java] view plaincopy

  1.      /** 
  2. * 把改变的domcument对象保存到指定的xml文件中 
  3. * @author chenleixing 
  4. * @throws IOException  
  5. */  
  6. ublic void saveDocument(Document document,File xmlFile) throws IOException{  
  7. Writer osWrite=new OutputStreamWriter(new FileOutputStream(xmlFile));//创建输出流  
  8. OutputFormat format = OutputFormat.createPrettyPrint();  //获取输出的指定格式    
  9. format.setEncoding("UTF-8");//设置编码 ,确保解析的xml为UTF-8格式  
  10. XMLWriter writer = new XMLWriter(osWrite,format);//XMLWriter 指定输出文件以及格式    
  11. writer.write(document);//把document写入xmlFile指定的文件(可以为被解析的文件或者新创建的文件)    
  12. writer.flush();  
  13. writer.close();  

       过程中一定注意编码的问题,如代码里所注释的,否则汉字很容易出现乱码。

查看更改后的结果文件

[java] view plaincopy

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <root>   
  4.   <user date="更改" add="增加">   
  5.     <name>张三</name>   
  6.   </user>    
  7.   <newNode>新增节点的内容</newNode>  
  8. </root>  

Dom4j解析xml文件-递归遍历所有节点和属性
HTML+CSS技术学习  https://www.itkc8.com

转载请注明—作者:Java我人生(陈磊兴)   原文出处:http://blog.csdn.net/chenleixing/article/details/44356837

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值