Dom4j解析xml文件-递归遍历所有节点和属性

 

       Dom4j是java中常用读取xml文件的工具,就方便性和性能方面,一定程度要优于JDK中Domcument和SAX解析的,感兴趣的童鞋可以看看这篇文章 java解析XML的四种方式及比较,相关jar包可免费下载:dom4j-1.6.1.jar,下边我就分享一下用Dom4j对xml文件进行遍历,一看代码就明白了,注释的很详细。

被测试的xml文件test.xml

[java]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <root>  
  3.     <user editor="chenleixing" date="2015-02-15">  
  4.         <name>张三</name>  
  5.         <year>24</year>  
  6.         <sex>男</sex>  
  7.     </user>  
  8.     <user editor="zhangxiaochao" date="2015-02-15">  
  9.         <name>李四</name>  
  10.         <year>24</year>  
  11.         <sex>女</sex>  
  12.     </user>  
  13. </root>  

创建File,获取根节点

[java]  view plain  copy
  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:\\test.xml");//根据指定的路径创建file对象  
  9.     Document document=sax.read(xmlFile);//获取document对象,如果文档无节点,则会抛出Exception提前结束  
  10.     Element root=document.getRootElement();//获取根节点  
  11.     this.getNodes(root);//从根节点开始遍历所有节点  
  12.   
  13. }  

从指定节点开始,递归遍历所有节点和属性

[java]  view plain  copy
  1.        /** 
  2.  * 从指定节点开始,递归遍历所有子节点 
  3.  * @author chenleixing 
  4.  */  
  5. public void getNodes(Element node){  
  6.     System.out.println("--------------------");  
  7.       
  8.     //当前节点的名称、文本内容和属性  
  9.     System.out.println("当前节点名称:"+node.getName());//当前节点名称  
  10.     System.out.println("当前节点的内容:"+node.getTextTrim());//当前节点名称  
  11.     List<Attribute> listAttr=node.attributes();//当前节点的所有属性的list  
  12.     for(Attribute attr:listAttr){//遍历当前节点的所有属性  
  13.         String name=attr.getName();//属性名称  
  14.         String value=attr.getValue();//属性的值  
  15.         System.out.println("属性名称:"+name+"属性值:"+value);  
  16.     }  
  17.       
  18.     //递归遍历当前节点所有的子节点  
  19.     List<Element> listElement=node.elements();//所有一级子节点的list  
  20.     for(Element e:listElement){//遍历所有一级子节点  
  21.         this.getNodes(e);//递归  
  22.     }  
  23. }  

输出结果

[java]  view plain  copy
  1. --------------------  
  2. 当前节点名称:root  
  3. 当前节点的内容:  
  4. --------------------  
  5. 当前节点名称:user  
  6. 当前节点的内容:  
  7. 属性名称:editor属性值:chenleixing  
  8. 属性名称:date属性值:2015-02-15  
  9. --------------------  
  10. 当前节点名称:name  
  11. 当前节点的内容:张三  
  12. --------------------  
  13. 当前节点名称:year  
  14. 当前节点的内容:24  
  15. --------------------  
  16. 当前节点名称:sex  
  17. 当前节点的内容:男  
  18. --------------------  
  19. 当前节点名称:user  
  20. 当前节点的内容:  
  21. 属性名称:editor属性值:zhangxiaochao  
  22. 属性名称:date属性值:2015-02-15  
  23. --------------------  
  24. 当前节点名称:name  
  25. 当前节点的内容:李四  
  26. --------------------  
  27. 当前节点名称:year  
  28. 当前节点的内容:24  
  29. --------------------  
  30. 当前节点名称:sex  
  31. 当前节点的内容:女  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值