码迷,mamicode.com
首页 > 其他好文 > 详细

Dom4j

时间:2014-05-14 08:41:03      阅读:317      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   c   

DOM4J即Document Object Model for Java使用java技术以文档方式解析XML数据的模型。

DOM4J是开源组织提供的一个免费的、强大的XML解析工具,如果开发者需要在项目中使用那么需要下载并引入jar包。

dom4j is an Open Source XML framework for Java. dom4j allows you to read, write, navigate, create and modify XML documents. dom4j integrates with DOM and SAX and is seamlessly integrated with full XPath support

下载:http://sourceforge.net/projects/dom4j

引入:dom4j-1.6.1.jar (核心包)、 jaxen-1.1-beta-6.jar(Xpath支持包)

 如何去学习一个开源的工具包?

一般的开源工具中都提供了免费的API文件,开发者可以参考该文档。

DOM4J提供的文档中有一个免费教程可以直接使用。->Quickstart

  开始解析

1. 准备需要解析的xml文件linkmans.xml

bubuko.com,布布扣
 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 2 <linkmans>
 3     <linkman>
 4         <name>jack</name>
 5         <phone>18663243245</phone>
 6         <email>jack@163.com</email>
 7     </linkman>
 8     <linkman>
 9         <name>张三</name>
10         <phone>1353243247</phone>
11         <email>zs@126.com</email>
12     </linkman>
13 </linkmans>
bubuko.com,布布扣

2. 获取解析器

bubuko.com,布布扣
1 // 2.获取解析器
2     public static SAXReader getReader(){
3         return new SAXReader();
4     }
bubuko.com,布布扣

3. 获取解析对象

bubuko.com,布布扣
1 // 3.获取解析好的文档对象
2     public static Document getDocument(File file)throws Exception{
3         // 3.1获取解析器
4         SAXReader reader = getReader();
5         // 3.2解析文档
6         Document doc = reader.read(file);
7         return doc;
8     }
bubuko.com,布布扣

4. 获取根元素节点

bubuko.com,布布扣
 1     // 4.获取根元素
 2     public static void getRoot(File file)throws Exception{
 3         // 4.1获取解析器
 4         SAXReader reader = getReader();
 5         // 4.2解析文档
 6         Document doc = reader.read(file);
 7         // 4.3获取根元素
 8         Element root = doc.getRootElement();
 9         System.out.println(root.getName());
10     }
bubuko.com,布布扣

5. 获取指定的其他的元素

获取其他元素的时候默认需要从根节点开始查找。

bubuko.com,布布扣
 1     // 5.获取指定的元素
 2     public static void getElement(File file) throws Exception {
 3         // 5.1获取解析器
 4         SAXReader reader = getReader();
 5         // 5.2解析文档
 6         Document doc = reader.read(file);
 7         // 5.3获取根元素
 8         Element root = doc.getRootElement();
 9         // 5.4获取所有的linkman
10         List list = root.elements("linkman");
11         Iterator it = list.iterator();
12         // 5.5循环遍历节点
13         while (it.hasNext()) {
14             Element ele = (Element) it.next();
15             System.out.println(ele.getName());
16         }
17         System.out.println("---------------");
18         // 简化
19         for (Iterator i = root.elementIterator(); i.hasNext();) {
20             Element element = (Element) i.next();
21             System.out.println(element.getName());
22         }
23         // 5.6获取第二个linkman的名字
24         Element linkman2 = (Element) list.get(1);
25         String name = linkman2.element("name").getText();
26         System.out.println(name);
27     }
bubuko.com,布布扣

6. 添加元素

bubuko.com,布布扣
 1 // 6. 添加元素
 2     public static Document addElement(File file)throws Exception{
 3         // 6.1获取解析器
 4         SAXReader reader = getReader();
 5         // 6.2解析文档
 6         Document doc = reader.read(file);
 7         // 6.3获取根元素
 8         Element root = doc.getRootElement();
 9         // 6.4创建新元素
10         Element new_linkman = DocumentHelper.createElement("linkman");
11         Element new_name = DocumentHelper.createElement("name");
12         Element new_phone = DocumentHelper.createElement("phone");
13         Element new_email = DocumentHelper.createElement("email");
14         
15         new_name.setText("焦宁波");
16         new_phone.setText("186xxxxxxxxx");
17         new_email.setText("jnb@itcast.cn");
18         // 6.5建立关系
19         new_linkman.add(new_name);
20         new_linkman.add(new_phone);
21         new_linkman.add(new_email);
22         root.add(new_linkman);
23         return doc;
24     }
bubuko.com,布布扣

7. 修改的document需要进行持久化的操作,因此需要提供以下的方法

bubuko.com,布布扣
 1 // 提供一个工具方法将内存中的Document写入XML文件
 2     public static void writeDocument2XML(Document doc, File file)throws Exception{
 3        // 创建创建一个转换对象
 4        XMLWriter writer = new XMLWriter(
 5         // 可以解决输入的数据时中文的乱码问题
 6 new OutputStreamWriter(new FileOutputStream(file),"UTF-8"));
 7        // 将doc写入指定文件
 8        writer.write(doc);
 9        // 释放资源
10        writer.close();
11     }
bubuko.com,布布扣

8. 修改元素

bubuko.com,布布扣
 1     // 8. 修改元素
 2     public static Document modifyElement(File file) throws Exception {
 3         // 8.1获取解析器
 4         SAXReader reader = getReader();
 5         // 8.2解析文档
 6         Document doc = reader.read(file);
 7         // 8.3获取根元素
 8         Element root = doc.getRootElement();
 9         // 8.4直接获取第二个linkman的name
10         Element name = 
11 ((Element)root.elements("linkman").get(1)).element("name");
12         name.setText("李四");
13         return doc;
14     }
bubuko.com,布布扣

9. 删除元素

bubuko.com,布布扣
 1 // 9. 删除元素
 2     public static Document removeAll(File file)throws Exception{
 3         // 9.1获取解析器
 4         SAXReader reader = getReader();
 5         // 9.2解析文档
 6         Document doc = reader.read(file);
 7         // 9.3获取根元素
 8         Element root = doc.getRootElement();
 9         // 9.4获取所有的linkman
10         List list = root.elements("linkman");
11         // 9.4循环断绝关系
12         for(Object temp :list){
13            // 转型
14            Element linkman = (Element)temp;
15            // 断绝关系
16            root.remove(linkman);
17         }
18         return doc;
19     }
bubuko.com,布布扣

10. 属性的操作

bubuko.com,布布扣
 1     // 10. 属性操作
 2     public static Document optionAttribute(File file)throws Exception{
 3         // 10.1获取解析器
 4         SAXReader reader = getReader();
 5         // 10.2解析文档
 6         Document doc = reader.read(file);
 7         // 10.3获取根元素
 8         Element root = doc.getRootElement();
 9         // 10.4获取所有的linkman
10         List list = root.elements("linkman");
11         // 10.4循环添加属性
12         int count = 0;
13         for(Object temp :list){
14            // 转型
15            Element linkman = (Element)temp;
16            // 添加属性
17            linkman.add(DocumentHelper.createAttribute(linkman, 
18 "id", "00"+(count+1)));
19            count++;
20         }
21         // 10.5获取焦宁波的id
22         Element linkman3 = (Element) list.get(2);
23         String value = linkman3.attribute("id").getText();
24         System.out.println(value);
25         // 10.6修改属性
26         linkman3.attribute("id").setText("007");
27         // 10.7删除属性
28         linkman3.remove(linkman3.attribute("id"));
29         return doc;
30     }    
bubuko.com,布布扣

 

 

 

 

Dom4j,布布扣,bubuko.com

Dom4j

标签:style   blog   class   code   java   c   

原文地址:http://www.cnblogs.com/friends-wf/p/3725642.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!