http://www.cnblogs.com/mengdd/archive/2013/06/05/3119927.html
Java XML解析工具 dom4j介绍及使用实例
dom4j介绍
dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory
dom4j是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。
dom4j的使用
下载了dom4j项目之后,解压缩,将其jar包(我的当前版本叫做dom4j-1.6.1.jar)加入class path下面。
(Properties->Java Build Path -> Add External JARs…)。
之后就可以使用其提供的API进行编程。
程序实例1
第一个程序,用Java代码生成xml文档,代码如下:
package com.example.xml.dom4j;import java.io.FileOutputStream;import java.io.FileWriter;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;/** * dom4j框架学习 使用dom4j框架创建xml文档并输出保存 * */publicclass Dom4JTest1{ publicstaticvoid main(String[] args) throws Exception { // 第一种方式:创建文档,并创建根元素 // 创建文档:使用了一个Helper类 Document document = DocumentHelper.createDocument(); // 创建根节点并添加进文档 Element root = DocumentHelper.createElement("student"); document.setRootElement(root); // 第二种方式:创建文档并设置文档的根元素节点 Element root2 = DocumentHelper.createElement("student"); Document document2= DocumentHelper.createDocument(root2); // 添加属性 root2.addAttribute("name", "zhangsan"); // 添加子节点:add之后就返回这个元素 Element helloElement = root2.addElement("hello"); Element worldElement = root2.addElement("world"); helloElement.setText("hello Text"); worldElement.setText("world text"); // 输出 // 输出到控制台 XMLWriter xmlWriter = new XMLWriter(); xmlWriter.write(document); // 输出到文件 // 格式 OutputFormat format = new OutputFormat(" ", true);// 设置缩进为4个空格,并且另起一行为true XMLWriter xmlWriter2 = new XMLWriter( new FileOutputStream("student.xml"), format); xmlWriter2.write(document2); // 另一种输出方式,记得要调用flush()方法,否则输出的文件中显示空白 XMLWriter xmlWriter3 = new XMLWriter(new FileWriter("student2.xml"), format); xmlWriter3.write(document2); xmlWriter3.flush(); // close()方法也可以 }}
程序Console输出:
?></span>
生成的一个xml文档:
xml version="1.0" encoding="UTF-8"?><< span>student name="zhangsan"><< span>hello>hello Text</>hello><< span>world>world text</>world></>student>
</span></span></span></span>
程序实例2
程序实例2,读入xml文档并分析,将其内容输出。
首先,待分析的文档如下:
xml version="1.0" encoding="UTF-8"?><< span>students name="zhangsan"><< span>hello name="lisi">hello Text1</>hello><< span>hello name="lisi2">hello Text2</>hello><< span>hello name="lisi3">hello Text3</>hello><< span>world name="wangwu">world text1</>world><< span>world name="wangwu2">world text2</>world><< span>world >world text3</>world></>students>
</span></span></span></span></span></span></span></span>
Java代码:
package com.example.xml.dom4j;import java.io.File;import java.util.Iterator;import java.util.List;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.DOMReader;import org.dom4j.io.SAXReader;/** * dom4j框架学习: 读取并解析xml * * */publicclass Dom4JTest2{ publicstaticvoid main(String[] args) throws Exception { SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File("students.xml")); // 获取根元素 Element root = document.getRootElement(); System.out.println("Root: " + root.getName()); // 获取所有子元素 List childList = root.elements(); System.out.println("total child count: " + childList.size()); // 获取特定名称的子元素 List childList2 = root.elements("hello"); System.out.println("hello child: " + childList2.size()); // 获取名字为指定名称的第一个子元素 Element firstWorldElement = root.element("world"); // 输出其属性 System.out.println("first World Attr: " + firstWorldElement.attribute(0).getName() + "=" + firstWorldElement.attributeValue("name")); System.out.println("迭代输出-----------------------"); // 迭代输出for (Iterator iter = root.elementIterator(); iter.hasNext();) { Element e = (Element) iter.next(); System.out.println(e.attributeValue("name")); } System.out.println("用DOMReader-----------------------"); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); // 注意要用完整类名 org.w3c.dom.Document document2 = db.parse(new File("students.xml ")); DOMReader domReader = new DOMReader(); // 将JAXP的Document转换为dom4j的Document Document document3 = domReader.read(document2); Element rootElement = document3.getRootElement(); System.out.println("Root: " + rootElement.getName()); }}
代码运行后输出:
Root: studentstotal child count: 6hello child: 3first World Attr: name=wangwu迭代输出-----------------------lisilisi2lisi3wangwuwangwu2null用DOMReader-----------------------Root: students
参考资料
圣思园张龙老师XML视频教程。
源代码下载处:http://sourceforge.net/
搜索dom4j:http://sourceforge.net/projects/dom4j/?source=directory