【云小課】基礎服務第42課 網絡知識一籮筐——揭開IP地址的神秘身份
903
2025-03-31
Dom4j:
Dom SUN
dom在加載時,將所有元素全部加載內存
DOM4j - 第三方。
Dom4j是一個開源、靈活的XML API。
目前很多開源框架如struts,hibernate都使用dom4j做為解析其xml的工具。
支持文檔的讀寫功能和Xpath快速查詢操作。
這個需要我們自己把它的包導入myeclipse中的。
準備DOM4j:
包:dom4j.x.jar
包結構:
org.dom4j
類
org.dom4j.io.SAXReader – xml文檔解析器
org.dom4j.Document、Element – 文檔對像
需要知道的 Element的一些方法
Element.element(“name”) –此元素下的第一個name元素。
Element.elementIterator(“name”) – 此元素下的所有name元素。返回Iterator
Element.getText() – 返回元素包含的文本。
Element.getAttribute(“name”) – 返回名稱為name的屬性。
Element.addElement(“name”); - 添加一個name元素,同時返回name元素本身。
org.dom4j.io.XMLWriter – 將Document寫出的對像。
DOM4J的層次圖:
使用UTF-8編碼,解決中文亂碼:
//聲明編碼格式 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); //保存(XMLWriter默認情況下即是使用UTF-8編碼。所以,如果使用OutputStream保存,且正好是UTF-8編碼,則不必擔心亂碼問題) XMLWriter xml = new XMLWriter(new FileOutputStream("./src/xml/a.xml"),format); xml.write(doc);
Dom4j-保存節點-處理中文亂碼:
在JavaIO中,writer總是本地編碼格式處理數據。即GB2312 所有,使用writer寫出數據有可能會發生一些問題,如保存不完整,或是亂碼: XMLWriter writer = new XMLWriter(new FileWriter(“a.xml”)); //寫出數據 writer.write(doc); 所以,建議在寫出數據時,使用OutputStream保存數據。
記住:刪除一個節點時,要用它的父節點刪除它。
添加或修改屬性的方法:addAttribute
Dom4j-從沒有到有生成一個新的xml:
//通過DocumentHelper在內存中創建一個Document Document doc = DocumentHelper.createDocument(); doc.setXMLEncoding(“UTF-8”);//XML的編碼格式 //生成一個節點,生成的第一個節點也是根節點,此方法只使用一次 Element root = doc.addElement(“users”);
1
2
3
4
5
Xpath
XML PATH Language。 可以實現快速查詢。 XPATH包含 XPath 使用路徑表達式在 XML 文檔中進行導航 。 XPath 包含一個標準函數庫 準備Xpath的包: jaxen.jar Xpath通過以下方法使用 dom.selectNodes – 返回一個 List對像 dom.selectSingleNode – 返回一個Node對像 //以下選擇所有的user節點,處理不帶命名空間的安以下原則 List
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
這個稍微了解一下:
Xpath處理帶有命名空間的XML文檔:
SAXReader sax = new SAXReader(); //聲明一個map用于保存命名空間 Map
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SAX,StAX讀取速度快。都是JAXP的成員。
StAX-Iterator編程接口和Cursor編程接口。
Dom4j。Dom。都會將所有節點加載加載到內存中。CRUD非常方便。
Dom4j支持XPath.
演示代碼:::
package cn.hncu.dom4j; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Iterator; import java.util.List; import java.util.Scanner; import org.dom4j.Document; import org.dom4j.DocumentException; 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 Dom4jDemo { @Test public void readDemo() throws Exception{ //聲明SAXReader核心讀取(xml)類,并獲得dom對象 SAXReader sax = new SAXReader(); Document dom = sax.read("xml5/users.xml"); //獲取根節點 Element root = dom.getRootElement(); //獲取里面的第一個子元素 Element user = root.element("user"); String id = user.attributeValue("id"); System.out.println(id); String name = user.element("name").getText();//獲取子元素中的文本內容--法1 String age = user.elementText("age");//獲取子元素中的文本內容--法2 System.out.println(name+","+age); } //顯示(遍歷)所有用戶 @Test public void readAll() throws Exception{ SAXReader reader = new SAXReader(); Document document = reader.read("xml5/users.xml"); Element root = document.getRootElement(); Iterator
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
Java XML
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。