使用Dom4J解析XML文件
1.简介
DOM4J简介
DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。
DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。
Dom:把整个文档作为一个对象。
DOM4J 最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义:
Attribute–定义了 XML 的属性。
Branch—-指能够包含子节点的节点。如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为
CDATA
定义了 XML CDATA 区域
CharacterData
是一个标识接口,标识基于字符的节点。如CDATA,Comment, Text.
Comment
定义了 XML 注释的行为
Document
定义了XML 文档
DocumentType
定义 XML DOCTYPE 声明
Element
定义XML 元素
ElementHandler
定义了Element 对象的处理器
ElementPath
被 ElementHandler 使用,用于取得当前正在处理的路径层次信息
Entity
定义 XML entity
Node
为dom4j中所有的XML节点定义了多态行为
NodeFilter
定义了在dom4j 节点中产生的一个滤镜或谓词的行为(predicate)
ProcessingInstruction
定义 XML 处理指令
Text
定义 XML 文本节点
Visitor
用于实现 Visitor模式
XPath
在分析一个字符串后会提供一个 XPath 表达式
接口之间的继承关系如下:
interface java.lang.Cloneable
interface org.dom4j.Node
interface org.dom4j.Attribute
interface org.dom4j.Branch
interface org.dom4j.Document
interface org.dom4j.Element
interface org.dom4j.CharacterData
interface org.dom4j.CDATA
interface org.dom4j.Comment
interface org.dom4j.Text
interface org.dom4j.DocumentType
interface org.dom4j.Entity
interface org.dom4j.ProcessingInstruction
2、XML文档操作1
- 使用的Jar包
dom4j-1.6.1.jar
jaxen-1.1-beta-6.jar
2.建立一篇xml文档
<?xml version="1.0" encoding="UTF-8" ?>
<class>
<student telephone="1234567">
<name>zhang3</name>
<age>18</age>
<gender>male</gender>
</student>
<student telephone="7654321">
<name>li4</name>
<age>24</age>
<gender>female</gender>
</student>
<student telephone="678901">
<name>wang5</name>
<age>22</age>
<gender>male</gender>
</student>
</class>
3.测试代码
package xml解析;
import java.io.File;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestMain {
public static void main(String[] args) {
SAXReader sr = new SAXReader();// 使用SAX解析
System.out.println("**********************************");
try {
Document doc = sr.read(new File("person.xml"));
List elements = doc.selectNodes("//class/student//name");
for (Object obj : elements) {
String text = ((Element) obj).getText();
System.out.println(text);
}
System.out.println("**********************************");
List attrs = doc.selectNodes("//class/student/@telephone");
for (Object obj : attrs) {
String text = ((Attribute) obj).getText();
System.out.println(text);
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}