Dom4j解析xml文件
dom4j是一个Java的XML API,类似于jdom,用来读取的XML文件,由于它是将文件解析完存放在内存当中的,所以不适合解析大的XML文件,但就方便性和性能方面,一定程度要优于JDK中Domcument和SAX解析的。下面我就用dom4j来对xml文件进行遍历,感兴趣的同学可以看一下,注释很详细
被解析的XML文件studentInfo.xml
<?xml version="1.0" encoding="UTF-8"?> <school> <college name="云计算"> <class name="1410A" classroom="36306"> <student> <property name="name" value="张三"></property> <property name="age" value="23"></property> <property name="garden" value="男"></property> </student> <student> <property name="name" value="李四"></property> <property name="age" value="22"></property> <property name="garden" value="女"></property> </student> <student> <property name="name" value="王五"></property> <property name="age" value="24"></property> <property name="garden" value="男"></property> </student> </class> </college> <college name="传媒"> <class name="1408C" classroom="35108"> <student> <property name="name" value="小明"></property> <property name="age" value="21"></property> <property name="garden" value="男"></property> </student> <student> <property name="name" value="小宇"></property> <property name="age" value="22"></property> <property name="garden" value="男"></property> </student> <student> <property name="name" value="小张"></property> <property name="age" value="25"></property> <property name="garden" value="男"></property> </student> <student> <property name="name" value="小红"></property> <property name="age" value="20"></property> <property name="garden" value="女"></property> </student> </class> </college> </school>
首先创建File,获取到根节点
/** * 功能:获取文件的document对象,然后获取对应的根节点 * 作者:茹子赫 * 时间:2016年12月6日 上午9:30:38 */ @Test public void testGetRoot() throws Exception{ //获取读取xml方式 SAXReader reader = new SAXReader(); //找到xml文件位置 File file = new File("studentInfo.xml"); //读取文档并存入到document中,如果文档无节点,则会抛出Exception提前结束 Document document = reader.read(file); //获取根节点 Element root = document.getRootElement(); //从根节点遍历所有子节点 this.getNodes(root); }
从根节点开始,递归遍历所有节点和属性
/** * 功能:递归遍历所有子节点 * 作者:茹子赫 * 时间:2016年12月6日 上午9:31:13 */ public void getNodes(Element node){ System.out.println("------------------------"); System.out.println("当前节点名称:"+node.getName()); System.out.println("节点的内容:"+node.getTextTrim()); //所有节点 List List<Attribute> listAttr = node.attributes(); //遍历所有节点的所有属性 for(Attribute attr : listAttr){ //属性的名称 String name = attr.getName(); //属性的值 String value = attr.getValue(); System.out.println("属性名称:"+name+" 属性值:"+value); } //递归遍历当前节点所有的子节点 List<Element> listElement = node.elements(); //遍历所有一级子节点 for(Element e : listElement){ this.getNodes(e); } }
部分输出结果
------------------------ 当前节点名称:school 节点的内容: ------------------------ 当前节点名称:college 节点的内容: 属性名称:name 属性值:云计算 ------------------------ 当前节点名称:class 节点的内容: 属性名称:name 属性值:1410A 属性名称:classroom 属性值:36306 ------------------------ 当前节点名称:student 节点的内容: ------------------------ 当前节点名称:property 节点的内容: 属性名称:name 属性值:name 属性名称:value 属性值:张三 ------------------------ 当前节点名称:property 节点的内容: 属性名称:name 属性值:age 属性名称:value 属性值:23 ------------------------ 当前节点名称:property 节点的内容: 属性名称:name 属性值:garden 属性名称:value 属性值:男 ------------------------ 当前节点名称:student 节点的内容: ------------------------ 当前节点名称:property 节点的内容: 属性名称:name 属性值:name 属性名称:value 属性值:李四 ------------------------ 当前节点名称:property 节点的内容: 属性名称:name 属性值:age 属性名称:value 属性值:22 ------------------------ 当前节点名称:property 节点的内容: 属性名称:name 属性值:garden 属性名称:value 属性值:女 ------------------------
其中我们也要用到dom4j-1.6.1.jar包