利用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