【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>
相关文章推荐
- javaweb学习总结十三(dom4j方式对XML文档进行解析以及Xpath的使用)
- Java中使用DOM方式解析和创建XML文档、及dom4j使用简介
- 【XML解析】(1)Java下使用JAXP中的DOM解析方式对XML文档进行解析
- xml解析4:使用dom4j框架进行对xml文档生成和读写解析
- java使用dom4j生成与解析xml文档的方法示例
- java中XML文档解析2(dom4j)和xpath的使用
- java中使用JAXP解析xml(三)对XML文档中进行增、删、改
- Java对XML文档进行解析(dom4j解析)
- java的xml学习[DOM4J方式解析XML文档]
- Java——使用DOM4j解析XML文档
- Java 解析xml文档笔记(SAX,DOM,DOM4J)
- 用SAX方式解析XML(使用Dom4J工具)--第二天
- 用SAX方式解析XML(使用Dom4J工具)--第二天
- 使用DOM解析XML文档示例(Java)
- 【原创】使用DOM解析XML文档示例(Java)
- JavaWeb 之 XML文档的DOM和SAX解析方式详解
- java 中dom4j 解析xml文档
- java中利用dom4j对XML文档的创建、解析、查找、修改、保存等操作。
- 使用SAX技术对XML文档进行解析范例
- JAVA解析XML的方式DOM、SAX、DOM4J、JDOM、StAX之比较