本次我将学习利用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