您的位置:首页 > 编程语言 > Java开发

【XML解析】(4)Java下使用DOM4J解析方式对XML文档进行解析

2017-05-29 17:21 866 查看

DOM4J来源:

Dom4j(Document For Java)-第三方开源,是从jdom分裂出来的解析技术。目前jdom已经完全被dom4j替代。

【注意】:

①jDom – Dom4j的前身。

②Dom4j在性能和速度上都比sun公司的要快,而且支持Xpath快速查找

③目前像Spring,Hibernate这些大型的框架,都是用的dom4j.

④支持文档的读写功能和Xpath快速查询操作。

【DOM4J开源包目录】:





如何学习DOM4J?

/**

*

* 学习方法:

* 1) 打开dom4j项目包中docs/index.html –> Quick Start –> 在这一页中介绍了dom4j的基本操作

* 2) index.html –> javadoc(1.6.1) –> 进入该版本的API文档,可以查看每个包中的类及方法的说明

* 3) 官网: http://www.dom4j.org/

*

*/

详细图解:::

dom4j-1.6.1/docs/index.html:



Quick start:

★★从这里开始,我们能够了解到关于dom4j★★:

Parsing XML、

Using Iterators、

Powerful Navigation with XPath、

Fast Looping、

Creating a new XML document、

Writing a document to a file、

Converting to and from Strings、

Styling a Document with XSLT

Javadoc:

在这里我们就可以使用JOM4J的API了,关键的核心技术在这里都能找到,开始学习API吧!



开始用dom4j解析xml文档:

有了上面的简单了解,可以使用dom4j技术解析xml文档了。

例子:我们开始解析users.xml文档:

所要解析的xml文档:

<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="A001">
<name>Jack</name>
<age>22</age>
</user>
<user id="A002">
<name>张三</name>
<age>24</age>
</user>
<user id="B001">
<name>小李</name>
<age>20</age>
</user>
<user id="B002">
<name>小张</name>
<age>28</age>
</user>
<user id="0777">
<name>湖南城市大学</name>
<age>1200</age>
</user>

</users>


(一)如何通过dom4j获得dom对象?

核心代码:

SAXReader sax = new SAXReader();
Document dom = sax.read("./xml/users.xml");


★【注意】:所使用的包:org.dom4j.io

有了包,在此我们引出DOM4J的类层次:::



【特别注意】:由于之前学过DOM解析,特别容易将org.w3c.dom与org.dom4j.io包混淆,在以后的dom4j解析编程中,Node(节点),Element(元素)、Document(文档) 这些重要的内容都是从dom4j获得。

(二)如何获得子元素?

★★什么是子元素?

dom的子元素包括了:



主要是:element(),elements()

①获得单个子元素就是用以下方法获得:

element(String name)、

② 获得所有的元素用以下方法获得:

elements():List

elements(String name):List

③还可以通过迭代器来获得单个元素或所有元素:

elementIterator():Iterator

elementIterator(String name):Iterator

代码演示:

public void helloDom4j() throws DocumentException {
// 获取DOM对象
SAXReader sax = new SAXReader(); Document dom = sax.read("./xml/users.xml");

// 获取根元素
Element root = dom.getRootElement();
// 获取根元素的name
String rootName = root.getName();
System.out.println(rootName);
/*
* 获取根元素下的子元素的一些方法: root.elements() //获取所有的子元素java.util.List
* root.element(qName)//获取指定名称的第一个元素 root.elements(qName)//获取指定名称的所有子元素
* root.elementIterator()//获取所有的元素--迭代器
* root.elementIterator(qName)//获取指定名称的所有子元素
*/

// 需求:把第一个<user>的信息提取出来
Element eUser = root.element("user");
String id = eUser.attributeValue("id");
String name = eUser.element("name").getTextTrim();
String age = eUser.elementText("age");
System.out.println(id + "," + name + "," + age);// 结果:A001,Jack,22
}


运行结果:



利用DOM4J对XML文档进行增删改查:

有了以上的基础,可以对XML文档进行一系列的操作了!

(1)增—增加最后一个元素

// 增---在root下面加一个<hncu>节点
@Test
public void add() throws DocumentException, Exception {
SAXReader sax = new SAXReader(); Document dom = sax.read("./xml/users.xml");
Element root = dom.getRootElement();
// 添加节点
Element eHncu = root.addElement("hncu");
eHncu.addAttribute("id", "0737");
Element eName = eHncu.addElement("name");
eName.addText("湖南城市学院");
Element eAge = eHncu.addElement("age");
eAge.addText("15");

// ////////////////////以下演示保存////////////////////////////// // 保存----持久化----字符流要刷流 // 法1:简易方式-----直接通过Document中的一个writer(writer w)来实现 /* * FileWriter fw=new FileWriter("./xml/users.xml/"); dom.write(fw); * fw.close(); */ // 法2:普通方式-----通过XMLwriter中的一个writer(dom) /* * 2.1用 构造 XMLWriter(OutputStream) XMLWriter xw=new XMLWriter(new * FileOutputStream("./xml/users.xml")); xw.write(dom); xw.close(); */ /* * 2.2用 构造XMLWriter(Writer writer) XMLWriter xw=new XMLWriter(new * FileWriter("./xml/users.xml/")); xw.write(dom); xw.close(); */ /* * 2.3用 构造 XMLWriter(Writer w,OutputFormat * format)----以制定的格式输出,可以解决中文乱码问题 OutputFormat * format=OutputFormat.createPrettyPrint(); XMLWriter xw=new * XMLWriter(new FileOutputStream("./xml/users.xml/"), format); * xw.write(dom); xw.close(); */
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xw = new XMLWriter(new FileOutputStream("./xml/users.xml/"),
format);
xw.write(dom);
xw.close();
}


(1-1)dom4j保存dom树

// ////////////////////以下演示保存//////////////////////////////
// 保存----持久化----字符流要刷流
// 法1:简易方式-----直接通过Document中的一个writer(writer w)来实现
/*
* FileWriter fw=new FileWriter("./xml/users.xml/"); dom.write(fw);
* fw.close();
*/
// 法2:普通方式-----通过XMLwriter中的一个writer(dom)
/*
* 2.1用 构造 XMLWriter(OutputStream) XMLWriter xw=new XMLWriter(new
* FileOutputStream("./xml/users.xml")); xw.write(dom); xw.close();
*/
/*
* 2.2用 构造XMLWriter(Writer writer) XMLWriter xw=new XMLWriter(new
* FileWriter("./xml/users.xml/")); xw.write(dom); xw.close();
*/
/*
* 2.3用 构造 XMLWriter(Writer w,OutputFormat
* format)----以制定的格式输出,可以解决中文乱码问题 OutputFormat
* format=OutputFormat.createPrettyPrint(); XMLWriter xw=new
* XMLWriter(new FileOutputStream("./xml/users.xml/"), format);
* xw.write(dom); xw.close();
*/


(2)删—删除最后一个元素

// 删----删除最后一个元素
@Test
public void del() throws DocumentException, IOException {
SAXReader sax = new SAXReader(); Document dom = sax.read("./xml/users.xml");
Element root = dom.getRootElement();
List<Element> list = root.elements();
Element e = list.get(list.size() - 1);
e.getParent().remove(e);
// 保存
XMLWriter xw = new XMLWriter(new FileOutputStream("./xml/users.xml"));
xw.write(dom);
xw.close();
}


(3)改—-修改最后一个元素

// 改----修改最后一个元素
@Test
public void update() throws Exception {
SAXReader sax = new SAXReader(); Document dom = sax.read("./xml/users.xml");
Element root=dom.getRootElement();
List<Element> list=root.elements();
Element eLast =list.get(list.size()-1);
eLast.addAttribute("id", "0777");
eLast.element("name").setText("湖南城市大学");
eLast.element("age").setText("1200");
XMLWriter xw=new XMLWriter(new FileOutputStream("./xml/users.xml"));
xw.write(dom);
xw.close();

}


(4)查—-遍历所有的

// 查---遍历所有的<user>
@Test
public void queryAll() throws DocumentException {
SAXReader sax = new SAXReader();
Document dom = sax.read("./xml/users.xml/");
Element root = dom.getRootElement();
Iterator<Element> it = root.elementIterator();
while (it.hasNext()) {
Element eUser = it.next();
String id = eUser.attributeValue("id");
String name = eUser.elementText("name");
String age = eUser.elementText("age");
System.out.println(id + "," + name + "," + age);
}
}


利用DOM4J创建一个新的XML文档:

// 无中生有-----利用程序创建一个新的XML文档
@Test
public void createNewXml() throws Exception {
// 核心代码:创建出DOM即可
Document dom = DocumentHelper.createDocument();
Element root = dom.addElement("students");
Element eStud=root.addElement("stud");
eStud.addAttribute("id", "1406101-12");
eStud.addElement("name").setText("Jack");
eStud.addElement("age").setText("22");

//保存
XMLWriter xw=new XMLWriter(new FileWriter("./xml/students.xml/"));
xw.write(dom);
xw.close();
}


创建后的新xml文档:

<?xml version="1.0" encoding="UTF-8"?>
<students>
<stud id="1406101-12">
<name>Jack</name>
<age>22</age>
</stud>
</students>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: