利用Dom4j解析xml文档

本次我将学习利用Dom4j中的SAXReader(还有个是DOMReader)来解析xml 文档,解析的xml为:test.xml,源码如下

<?xml version="1.0" encoding="UTF-8"?>
<学生名册>
	<学生 学号="1">
		<姓名>张三</姓名>
		<性别>男</性别>
		<年龄>20</年龄>
	</学生>
	<学生 学号="2">
		<姓名>李四</姓名>
		<性别>女</性别>
		<年龄>19</年龄>
	</学生>
	<学生 学号="3">
		<姓名>王五</姓名>
		<性别>男</性别>
		<年龄>21</年龄>
	</学生>
</学生名册>

要解析xml,首先要创建SAXReader,然后读取xml获得它的Document对象。

	SAXReader saxReader=new SAXReader();
         // 读取xml文档
       Document document=saxReader.read(new File("test.xml"));

之后我们就可以获得其根元素节点,以及根元素下的元素

 //获得xml文档的根节点	
	    Element root=document.getRootElement();
	    System.out.println("rootElement :"+root.getName());
	    //获取根元素下,所有子元素的集合 
	    List  childList= root.elements();
	    System.out.println("childList Size:" +childList.size());
	    //获取根元素下指定子元素集合
	    List childList2=root.elements("学生");
	    System.out.println("childList Size :"+childList.size());
	    //返回以学生名作为名字的第一个元素
	    Element first=root.element("学生");
	    System.out.println("first :"+first.getName());
	    System.out.println("fist attValue:"+ first.attributeValue("学号"));

Dom4j,为我们提供了迭代器的功能,elementIterator()、attributeIterator()方便我们遍历元素及属性.

	for(Iterator iter=root.elementIterator();iter.hasNext();){
			    Element e=(Element)iter.next();     
		        //遍历e元素下所有的属性
		        for (Iterator attrs=e.attributeIterator();attrs.hasNext();){	 	
	    	    Attribute attr=(Attribute)attrs.next();
	    	    System.out.println(attr.getName()+":"+e.attributeValue(attr.getName()));
		    }
		        //遍历e元素下的所有子元素
		       for (Iterator subIterator=e.elementIterator();subIterator.hasNext();){
		    	      Element subElement=(Element)subIterator.next(); 
		    	      System.err.println(subElement.getName()+":"+subElement.getText());

		       }        
	    }
 

至此简单的解析xml文档完毕,附上完成的源代码:

SAXReader saxReader=new SAXReader();
         // 读取xml文档
		Document document=saxReader.read(new File("test.xml"));
         //获得xml文档的根节点	
	    Element root=document.getRootElement();
	    System.out.println("rootElement :"+root.getName());
	    //获取根元素下,所有子元素的集合 
	    List  childList= root.elements();
	    System.out.println("childList Size:" +childList.size());
	    //获取根元素下指定子元素集合
	    List childList2=root.elements("学生");
	    System.out.println("childList Size :"+childList.size());
	    //返回以学生名作为名字的第一个元素
	    Element first=root.element("学生");
	    System.out.println("first :"+first.getName());
	    System.out.println("fist attValue:"+ first.attributeValue("学号"));
	  
	    //利用迭代器迭代根元素下的所有子元素
		for(Iterator iter=root.elementIterator();iter.hasNext();){
			    Element e=(Element)iter.next();     
		        //遍历e元素下所有的属性
		        for (Iterator attrs=e.attributeIterator();attrs.hasNext();){	 	
	    	    Attribute attr=(Attribute)attrs.next();
	    	    System.out.println(attr.getName()+":"+e.attributeValue(attr.getName()));
		    }
		        //遍历e元素下的所有子元素
		       for (Iterator subIterator=e.elementIterator();subIterator.hasNext();){
		    	      Element subElement=(Element)subIterator.next(); 
		    	      System.err.println(subElement.getName()+":"+subElement.getText());

		       }        
	    }

输出结果为:

rootElement :学生名册
childList Size:3
childList Size :3
first :学生
fist attValue:1
学号:1
学号:2
学号:3
姓名:张三
性别:男
年龄:20
姓名:李四
性别:女
年龄:19
姓名:王五
性别:男
年龄:21


 


 

原文地址:https://www.cnblogs.com/wuyida/p/6300453.html