DOM4J -(XML解析包)

℡╲_俬逩灬. 提交于 2019-12-01 12:13:58

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

Document转成String
String xmlText = document.asXML();

 

 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!