一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Dom4j解析XML_動力節點Java學院整理

Dom4j解析XML_動力節點Java學院整理

2020-12-07 11:28redarmy Java教程

這篇文章主要介紹了Dom4j解析XML,dom4j是一個Java的XML API,類似于jdom,用來讀寫XML文件的,有興趣的可以了解一下

dom4j是一個Java的XML API,類似于jdom,用來讀寫XML文件的。dom4j是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件,可以在SourceForge上找到它.

對主流的java XML API進行的性能、功能和易用性的評測,dom4j無論在那個方面都是非常出色的。如今你可以看到越來越多的Java軟件都在使用dom4j來讀寫XML,例如hibernate,包括sun公司自己的JAXM也用了Dom4j

使用Dom4j開發,需下載dom4j相應的jar文件

1.官網下載: http://www.dom4j.org/dom4j-1.6.1/

2.dom4j是sourceforge.net上的一個開源項目,因此可以到http://sourceforge.Net/projects/dom4j下載其最新版.

打開dom4j-1.6.1的解壓文件,在這里可以看到有docs幫助的文件夾,也有需要使用dom4j解析xml文件的dom4j-1.6.1.jar文件.我們只需要把dom4j-1.6.1.jar文件構建到我們開發的項目中就可以使用dom4j開發了.

下面我以Myeclipse創建Java項目的構建方法為例說明.

首先創建一個demo項目,在demo項目中創建一個lib文件,把dom4j-1.6.1.jar文件拷貝到lib中,然后右鍵dom4j-1.6.1jar文件

Dom4j解析XML_動力節點Java學院整理

點擊Add to Build Path即可構建到項目中去了.

備注:如果進行的是web項目開發,我們只需要把它拷貝到web-inf/lib中去即可,會自動構建到web項目中.

在項目開發的過程中可以參考docs文件夾的(幫助文檔),找到index.html打開,點擊Quick start可以通過幫助文檔進行學習 dom4j進行xml的解析.

Dom4j解析XML_動力節點Java學院整理

下面我對我認為api中重要的方法進行翻譯說明如下:

一、DOM4j中,獲得Document對象的方式有三種:

?
1
2
3
4
5
6
7
8
9
//1.讀取XML文件,獲得document對象      
         SAXReader reader = new SAXReader();        
    Document  document = reader.read(new File("csdn.xml"));
//2.解析XML形式的文本,得到document對象.
         String text = "<csdn></csdn>";       
         Document document = DocumentHelper.parseText(text);
//3.主動創建document對象.
         Document document = DocumentHelper.createDocument();       //創建根節點
         Element root = document.addElement("csdn");

二、節點對象操作的方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//1.獲取文檔的根節點.
   Element root = document.getRootElement();
//2.取得某個節點的子節點.
   Element element=node.element(“四大名著");
//3.取得節點的文字
    String text=node.getText();
//4.取得某節點下所有名為“csdn”的子節點,并進行遍歷. 
    List nodes = rootElm.elements("csdn"); 
     for (Iterator it = nodes.iterator(); it.hasNext();) {  
   Element elm = (Element) it.next();  
  // do something
 }
//5.對某節點下的所有子節點進行遍歷.   
   for(Iterator it=root.elementIterator();it.hasNext();){    
    Element element = (Element) it.next();    
    // do something 
 }
// 6.在某節點下添加子節點
 Element elm = newElm.addElement("朝代");
//7.設置節點文字.
 elm.setText("明朝");
//8.刪除某節點. //childElement是待刪除的節點,parentElement是其父節點
parentElement.remove(childElment); 
//9.添加一個CDATA節點.
Element contentElm = infoElm.addElement("content"); contentElm.addCDATA(“cdata區域”);

三、節點對象的屬性方法操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//1.取得某節點下的某屬性   Element root=document.getRootElement();     //屬性名name
     Attribute attribute=root.attribute("id");
//2.取得屬性的文字
  String text=attribute.getText();
//3.刪除某屬性 Attribute attribute=root.attribute("size"); root.remove(attribute);
//4.遍歷某節點的所有屬性  
   Element root=document.getRootElement();    
    for(Iterator it=root.attributeIterator();it.hasNext();){     
      Attribute attribute = (Attribute) it.next();     
      String text=attribute.getText();     
      System.out.println(text);  
 }
// 5.設置某節點的屬性和文字. 
 
 newMemberElm.addAttribute("name", "sitinspring");
//6.設置屬性的文字 
 
 Attribute attribute=root.attribute("name");  attribute.setText("csdn");

四、將文檔寫入XML文件

?
1
2
3
4
5
6
7
8
9
10
//1.文檔中全為英文,不設置編碼,直接寫入的形式.  
    XMLWriter writer = new XMLWriter(new FileWriter("ot.xml")); 
    writer.write(document);  
    writer.close();
// 2.文檔中含有中文,設置編碼格式寫入的形式. 
    OutputFormat format = OutputFormat.createPrettyPrint(); // 創建文件輸出的時候,自動縮進的格式         
    format.setEncoding("UTF-8");//設置編碼
    XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);
    writer.write(document);
    writer.close();

五、字符串與XML的轉換

?
1
2
3
4
5
6
7
8
9
10
11
// 1.將字符串轉化為XML
   String text = "<csdn> <java>Java班</java></csdn>";
   Document document = DocumentHelper.parseText(text);
// 2.將文檔或節點的XML轉化為字符串.
    SAXReader reader = new SAXReader();
    Document  document = reader.read(new File("csdn.xml"));      
    Element root=document.getRootElement();  
    String docXmlText=document.asXML(); 
    String rootXmlText=root.asXML();
    Element memberElm=root.element("csdn");
    String memberXmlText=memberElm.asXML();

 六、案例(解析sida.xml文件并對其進行curd的操作)

1.sida.xml描述四大名著的操作,文件內容如下

?
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<四大名著>
  <西游記 id="x001">
    <作者>吳承恩1</作者>
    <作者>吳承恩2</作者>
    <朝代>明朝</朝代>
  </西游記>
  <紅樓夢 id="x002">
    <作者>曹雪芹</作者>
  </紅樓夢>
</四大名著>

2.解析類測試操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package dom4j;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.util.Iterator;
import java.util.List;
 
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
 
public class Demo01 {
 
  @Test
  public void test() throws Exception {
 
    // 創建saxReader對象
    SAXReader reader = new SAXReader();
    // 通過read方法讀取一個文件 轉換成Document對象
    Document document = reader.read(new File("src/dom4j/sida.xml"));
    //獲取根節點元素對象
    Element node = document.getRootElement();
    //遍歷所有的元素節點
    listNodes(node);
 
    // 獲取四大名著元素節點中,子節點名稱為紅樓夢元素節點。
    Element element = node.element("紅樓夢");
    //獲取element的id屬性節點對象
    Attribute attr = element.attribute("id");
    //刪除屬性
    element.remove(attr);
    //添加新的屬性
    element.addAttribute("name", "作者");
    // 在紅樓夢元素節點中添加朝代元素的節點
    Element newElement = element.addElement("朝代");
    newElement.setText("清朝");
    //獲取element中的作者元素節點對象
    Element author = element.element("作者");
    //刪除元素節點
    boolean flag = element.remove(author);
    //返回true代碼刪除成功,否則失敗
    System.out.println(flag);
    //添加CDATA區域
    element.addCDATA("紅樓夢,是一部愛情小說.");
    // 寫入到一個新的文件中
    writer(document);
 
  }
 
  /**
   * 把document對象寫入新的文件
   *
   * @param document
   * @throws Exception
   */
  public void writer(Document document) throws Exception {
    // 緊湊的格式
    // OutputFormat format = OutputFormat.createCompactFormat();
    // 排版縮進的格式
    OutputFormat format = OutputFormat.createPrettyPrint();
    // 設置編碼
    format.setEncoding("UTF-8");
    // 創建XMLWriter對象,指定了寫出文件及編碼格式
    // XMLWriter writer = new XMLWriter(new FileWriter(new
    // File("src//a.xml")),format);
    XMLWriter writer = new XMLWriter(new OutputStreamWriter(
        new FileOutputStream(new File("src//a.xml")), "UTF-8"), format);
    // 寫入
    writer.write(document);
    // 立即寫入
    writer.flush();
    // 關閉操作
    writer.close();
  }
 
  /**
   * 遍歷當前節點元素下面的所有(元素的)子節點
   *
   * @param node
   */
  public void listNodes(Element node) {
    System.out.println("當前節點的名稱::" + node.getName());
    // 獲取當前節點的所有屬性節點
    List<Attribute> list = node.attributes();
    // 遍歷屬性節點
    for (Attribute attr : list) {
      System.out.println(attr.getText() + "-----" + attr.getName()
          + "---" + attr.getValue());
    }
 
    if (!(node.getTextTrim().equals(""))) {
      System.out.println("文本內容::::" + node.getText());
    }
 
    // 當前節點下面子節點迭代器
    Iterator<Element> it = node.elementIterator();
    // 遍歷
    while (it.hasNext()) {
      // 獲取某個子節點對象
      Element e = it.next();
      // 對子節點進行遍歷
      listNodes(e);
    }
  }
 
  /**
   * 介紹Element中的element方法和elements方法的使用
   *
   * @param node
   */
  public void elementMethod(Element node) {
    // 獲取node節點中,子節點的元素名稱為西游記的元素節點。
    Element e = node.element("西游記");
    // 獲取西游記元素節點中,子節點為作者的元素節點(可以看到只能獲取第一個作者元素節點)
    Element author = e.element("作者");
 
    System.out.println(e.getName() + "----" + author.getText());
 
    // 獲取西游記這個元素節點 中,所有子節點名稱為作者元素的節點 。
 
    List<Element> authors = e.elements("作者");
    for (Element aut : authors) {
      System.out.println(aut.getText());
    }
 
    // 獲取西游記這個元素節點 所有元素的子節點。
    List<Element> elements = e.elements();
 
    for (Element el : elements) {
      System.out.println(el.getText());
    }
 
  }
 
}

自己適當注釋部分代碼觀察運行效果,反復練習,希望你對dom4j有進一步的了解.

七、字符串與XML互轉換案例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package dom4j;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
 
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
 
public class Demo02 {
 
  @Test
  public void test() throws Exception {
 
    // 創建saxreader對象
    SAXReader reader = new SAXReader();
    // 讀取一個文件,把這個文件轉換成Document對象
    Document document = reader.read(new File("src//c.xml"));
    // 獲取根元素
    Element root = document.getRootElement();
    // 把文檔轉換字符串
    String docXmlText = document.asXML();
    System.out.println(docXmlText);
    System.out.println("---------------------------");
    // csdn元素標簽根轉換的內容
    String rootXmlText = root.asXML();
    System.out.println(rootXmlText);
    System.out.println("---------------------------");
    // 獲取java元素標簽 內的內容
    Element e = root.element("java");
    System.out.println(e.asXML());
 
  }
 
  /**
   * 創建一個document對象 往document對象中添加節點元素 轉存為xml文件
   *
   * @throws Exception
   */
  public void test2() throws Exception {
 
    Document document = DocumentHelper.createDocument();// 創建根節點
    Element root = document.addElement("csdn");
    Element java = root.addElement("java");
    java.setText("java班");
    Element ios = root.addElement("ios");
    ios.setText("ios班");
 
    writer(document);
  }
 
  /**
   * 把一個文本字符串轉換Document對象
   *
   * @throws Exception
   */
  public void test1() throws Exception {
    String text = "<csdn><java>Java班</java><net>Net班</net></csdn>";
    Document document = DocumentHelper.parseText(text);
    Element e = document.getRootElement();
    System.out.println(e.getName());
    writer(document);
  }
 
  /**
   * 把document對象寫入新的文件
   *
   * @param document
   * @throws Exception
   */
  public void writer(Document document) throws Exception {
    // 緊湊的格式
    // OutputFormat format = OutputFormat.createCompactFormat();
    // 排版縮進的格式
    OutputFormat format = OutputFormat.createPrettyPrint();
    // 設置編碼
    format.setEncoding("UTF-8");
    // 創建XMLWriter對象,指定了寫出文件及編碼格式
    // XMLWriter writer = new XMLWriter(new FileWriter(new
    // File("src//a.xml")),format);
    XMLWriter writer = new XMLWriter(new OutputStreamWriter(
        new FileOutputStream(new File("src//c.xml")), "UTF-8"), format);
    // 寫入
    writer.write(document);
    // 立即寫入
    writer.flush();
    // 關閉操作
    writer.close();
  }
}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久久精品日本一区二区三区 | 天美影视传媒mv直接看 | 亚洲va在线va天堂成人 | 国产日韩欧美视频 | 四虎影音先锋 | 成人免费视频一区 | 91麻豆精品激情在线观看最新 | 欧式午夜理伦三级在线观看 | 欧美人shou交在线播放 | 精品一区二区三区视频日产 | 美女黄金大片视频免费看 | 香蕉视频在线观看网站 | 超碰97 | 国产九九视频在线观看 | free性日本 | 女同性互吃奶乳免费视频 | 亚洲精品一区二区三区在线播放 | 草草剧场 | a黄毛片| 99久久精品国内 | 大学生按摩黄a级中文片 | 韩国一级淫片特黄特刺激 | 日本人妖视频 | 国产精品一区牛牛影视 | 91亚洲视频在线观看 | 欧美性高清另类videosex死尸 | 国产欧美日韩精品一区二 | 91影视在线看免费观看 | 午夜片神马影院福利 | 久久亚洲一级α片 | 日韩成人av在线 | 成人免费国产欧美日韩你懂的 | 亚洲精品综合一区二区 | 奇米激情| 国内自拍网红在综合图区 | 日本热妇| 私人影院在线播放 | 亚洲国产精品一区二区首页 | 青青草高清视频 | 亚洲无总热门 | 亚洲香蕉伊在人在线观婷婷 |