您的位置:首页 > 其它

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

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

被测试的xml文件test.xml

[java] view
plain copy

<?xml version="1.0" encoding="UTF-8"?>  

<root>  

    <user editor="chenleixing" date="2015-02-15">  

        <name>张三</name>  

        <year>24</year>  

        <sex>男</sex>  

    </user>  

    <user editor="zhangxiaochao" date="2015-02-15">  

        <name>李四</name>  

        <year>24</year>  

        <sex>女</sex>  

    </user>  

</root>  

创建File,获取根节点

[java] view
plain copy

       /** 

 * 获取文件的document对象,然后获取对应的根节点 

 * @author chenleixing 

 */  

@Test  

public void testGetRoot() throws Exception{  

    SAXReader sax=new SAXReader();//创建一个SAXReader对象  

    File xmlFile=new File("d:\\test.xml");//根据指定的路径创建file对象  

    Document document=sax.read(xmlFile);//获取document对象,如果文档无节点,则会抛出Exception提前结束  

    Element root=document.getRootElement();//获取根节点  

    this.getNodes(root);//从根节点开始遍历所有节点  

  

}  

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

[java] view
plain copy

       /** 

 * 从指定节点开始,递归遍历所有子节点 

 * @author chenleixing 

 */  

public void getNodes(Element node){  

    System.out.println("--------------------");  

      

    //当前节点的名称、文本内容和属性  

    System.out.println("当前节点名称:"+node.getName());//当前节点名称  

    System.out.println("当前节点的内容:"+node.getTextTrim());//当前节点名称  

    List<Attribute> listAttr=node.attributes();//当前节点的所有属性的list  

    for(Attribute attr:listAttr){//遍历当前节点的所有属性  

        String name=attr.getName();//属性名称  

        String value=attr.getValue();//属性的值  

        System.out.println("属性名称:"+name+"属性值:"+value);  

    }  

      

    //递归遍历当前节点所有的子节点  

    List<Element> listElement=node.elements();//所有一级子节点的list  

    for(Element e:listElement){//遍历所有一级子节点  

        this.getNodes(e);//递归  

    }  

}  

输出结果

[java] view
plain copy

--------------------  

当前节点名称:root  

当前节点的内容:  

--------------------  

当前节点名称:user  

当前节点的内容:  

属性名称:editor属性值:chenleixing  

属性名称:date属性值:2015-02-15  

--------------------  

当前节点名称:name  

当前节点的内容:张三  

--------------------  

当前节点名称:year  

当前节点的内容:24  

--------------------  

当前节点名称:sex  

当前节点的内容:男  

--------------------  

当前节点名称:user  

当前节点的内容:  

属性名称:editor属性值:zhangxiaochao  

属性名称:date属性值:2015-02-15  

--------------------  

当前节点名称:name  

当前节点的内容:李四  

--------------------  

当前节点名称:year  

当前节点的内容:24  

--------------------  

当前节点名称:sex  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: