Dom4j解析xml文件-递归遍历所有节点和属性
Dom4j是Java中常用读取xml文件的工具,就方便性和性能方面,一定程度要优于JDK中Domcument和SAX解析的,感兴趣的童鞋可以看看这篇文章 java解析XML的四种方式及比较,下边我就分享一下用Dom4j对xml文件进行遍历,一看代码就明白了,注释的很详细。
被测试的xml文件test.xml
<?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,获取根节点
/** * 从指定节点开始,递归遍历所有子节点 * @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);//递归 } }
从指定节点开始,递归遍历所有节点和属性
/** * 从指定节点开始,递归遍历所有子节点 * @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);//递归 } }
输出结果
-------------------- 当前节点名称:root 当前节点的内容: -------------------- 当前节点名称:user 当前节点的内容: 属性名称:editor属性值:chenleixing 属性名称:date属性值:2015-02-15 -------------------- 当前节点名称:name 当前节点的内容:张三 -------------------- 当前节点名称:year 当前节点的内容:24 -------------------- 当前节点名称:sex 当前节点的内容:男 -------------------- 当前节点名称:user 当前节点的内容: 属性名称:editor属性值:zhangxiaochao 属性名称:date属性值:2015-02-15 -------------------- 当前节点名称:name 当前节点的内容:李四 -------------------- 当前节点名称:year 当前节点的内容:24 -------------------- 当前节点名称:sex 当前节点的内容:女