DOM4J - 简介
是dom4j.org出品的一个开源XML解析包。Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。
Dom:把整个文档作为一个对象。
[ DOM4J - jar包下载 | JAXEN(对XPath的支持)]
DOM4J 接口定义
它的主要接口都在org.dom4j里面定义
| Attribute | 定义了XML属性 |
| Branch | 只能够包含子节点的节点。如XML元素(Element)和文档(Document)定义了一个公共的行为 |
| 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.
● 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
基本使用方式:
// 读取XML文件:创建ASXReader使用reader读取xml文件,获得Document对象:
SAXReader reader = new SAXReader();
Document document = reader.read("xml文件路径");
// 获取文档的根节点
Element root = document.getRootElement();
// 获取指定节点下的子节点
Element son_element = element.element("name");
// 获取节点的子节点集合
List<Element> elelist = element.elements();// 获取所有子节点
List<Element> son_elelist = element.elements(“name”);// 指定名称的子节点集合
// 获取节点属性的值
element.attributeValue("name");
// 获取元素内容
element.getText();
Element:定义XML元素
// 遍历所有子元素Iterator elementIterator();// 遍历所有子元素
Iterator elementIterator("name");// 遍历指定名称子元素
Attribute:定义了XML的属性
getName();// 获取属性名setName();// 设置属性名getValue();// 获取属性值setValue();// 设置属性值getDocument();setDocument();
DOM4J - XML文档操作
读取XML文件:读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。因为利用了相同的接口,它们的调用方式是一样的。
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
1 // 读取XML文件,获得document对象
2 SAXReader reader = new SAXReader();
3 Document doucument = reader.read("src/NewFile.xml");
4 // 获取根节点
5 Element root = doucument.getRootElement();
6 // System.out.println(e.getName());//打印根标签名字
7
8 // 遍历xml节点,elementIterator()方法获得它的子节点的Element对象们的一个迭代器
9 for (Iterator<Element> it = root.elementIterator(); it.hasNext();) {
10
11 Element ele = it.next();
12 System.out.println(ele.getName());
13 if (ele.getName().equals("good")) {
14 Element name = ele.element("name");
15 if (name != null)
16 System.out.println(" -" + name.getText());
17 }
18 // Attribute获取属性,并进行遍历
19 for (Iterator<Attribute> i = ele.attributeIterator(); i.hasNext();) {
20 Attribute a = i.next();
21 System.out.println(" " + a.getName() + ":" + a.getText());
22
23 }
24 }
创建XML文件:使用DocumentHelper创建新的document,在document下添加root元素,然后可以再root元素下创建各种节点。
Document document = DocumentHelper.createDocument();
Element root = document.addElement("members");// 创建根节点
1 // 建立document对象,用来操作xml文件
2 Document newDocument = DocumentHelper.createDocument();
3 // 建立根节点
4 Element newRoot = newDocument.addElement("root");
5 newRoot.addComment("This is a test for dom4j ");// 加入一行注释
6 // 添加一个authro1节点
7 Element authro1 = newRoot.addElement("authro");
8 // 添加属性内容
9 authro1.addAttribute("name", "James");
10 authro1.addAttribute("location", "UK");
11 // 添加文本节点
12 authro1.addText("James Strachan");
13 // 添加一个authro2节点
14 Element authro1 = newRoot.addElement("authro");
15 // 添加属性内容
16 authro1.addAttribute("name", "James");
17 authro1.addAttribute("location", "UK");
18 // 添加文本节点
19 authro1.addText("James Strachan");
20 try {
21 XMLWriter writer = new XMLWriter(new FileOutputStream("[路径/]filename"));
22 // 将Document对象写入xml文件中
23 writer.write(newDocument);
24 } catch (Exception e) {
25 e.printStackTrace();
26 } finally {
27 writer.close();// 关闭流
28 }
格式化输出Document,创建带有OutputFormat的XMLWriter可以实现对Document的格式化输出
1 // 排版
2 OutputFormat format = OutputFormat.createPrettyPrint();
3 XMLWriter writer = new XMLWriter(new FileWriter("[path]filename"), format);
4 writer.write(document);// 将Document对象写入xml文件中
5 writer.close();// 关闭流
6 // 紧凑
7 OutputFormat format = OutputFormat.createCompactFormat();
8 XMLWriter writer = new XMLWriter(new FileWriter("[path]filename"), format);
9 writer.write(document);// 将Document对象写入xml文件中
10 writer.close();// 关闭流
写入XML文件中文乱码问题:http://blog.sina.com.cn/s/blog_757b0e130101dqrx.html
String xmlText = document.asXML();