本文研究的主要是java使用DOM對(duì)XML文檔進(jìn)行增刪改查操作的相關(guān)代碼,具體實(shí)例如下所示。
源代碼:
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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
package com.zc.homeWork18; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class XMLWriter { private static String xmlPath = "src\\com\\zc\\homeWork18\\MyXml.xml" ; public static void getFamilyMemebers() { /* * 創(chuàng)建文件工廠實(shí)例 */ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 如果創(chuàng)建的解析器在解析XML文檔時(shí)必須刪除元素內(nèi)容中的空格,則為true,否則為false dbf.setIgnoringElementContentWhitespace(true); try { /* * 創(chuàng)建文件對(duì)象 */ DocumentBuilder db = dbf.newDocumentBuilder();// 創(chuàng)建解析器,解析XML文檔 Document doc = db.parse(xmlPath); // 使用dom解析xml文件 /* * 歷遍列表,進(jìn)行XML文件的數(shù)據(jù)提取 */ // 根據(jù)節(jié)點(diǎn)名稱來(lái)獲取所有相關(guān)的節(jié)點(diǎn) NodeList sonlist = doc.getElementsByTagName( "son" ); for ( int i = 0 ; i < sonlist.getLength(); i++) // 循環(huán)處理對(duì)象 { // 節(jié)點(diǎn)屬性的處理 Element son = (Element) sonlist.item(i); // 循環(huán)節(jié)點(diǎn)son內(nèi)的所有子節(jié)點(diǎn) for (Node node = son.getFirstChild(); node != null ; node = node .getNextSibling()) { // 判斷是否為元素節(jié)點(diǎn) if (node.getNodeType() == Node.ELEMENT_NODE) { String name = node.getNodeName(); String value = node.getFirstChild().getNodeValue(); System.out.println(name + " : " + value); } } } } catch (Exception e) { System.out.println(e.getMessage()); } } // 修改 public static void modifySon() { // 創(chuàng)建文件工廠實(shí)例 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setIgnoringElementContentWhitespace( true ); try { // 從XML文檔中獲取DOM文檔實(shí)例 DocumentBuilder db = dbf.newDocumentBuilder(); // 獲取Document對(duì)象 Document xmldoc = db.parse(xmlPath); // 獲取根節(jié)點(diǎn) Element root = xmldoc.getDocumentElement(); // 定位id為001的節(jié)點(diǎn) Element per = (Element) selectSingleNode( "/father/son[@id='001']" , root); // 將age節(jié)點(diǎn)的內(nèi)容更改為28 per.getElementsByTagName( "age" ).item( 0 ).setTextContent( "28" ); // 保存 TransformerFactory factory = TransformerFactory.newInstance(); Transformer former = factory.newTransformer(); former.transform( new DOMSource(xmldoc), new StreamResult( new File( xmlPath))); } catch (Exception e) { System.out.println(e.getMessage()); } } // 獲取目標(biāo)節(jié)點(diǎn),進(jìn)行刪除,最后保存 public static void discardSon() { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setIgnoringElementContentWhitespace( true ); try { DocumentBuilder db = dbf.newDocumentBuilder(); Document xmldoc = db.parse(xmlPath); // 獲取根節(jié)點(diǎn) Element root = xmldoc.getDocumentElement(); // 定位根節(jié)點(diǎn)中的id=002的節(jié)點(diǎn) Element son = (Element) selectSingleNode( "/father/son[@id='002']" , root); // 刪除該節(jié)點(diǎn) root.removeChild(son); // 保存 TransformerFactory factory = TransformerFactory.newInstance(); Transformer former = factory.newTransformer(); former.transform( new DOMSource(xmldoc), new StreamResult( new File( xmlPath))); } catch (Exception e) { System.out.println(e.getMessage()); } } // 新增節(jié)點(diǎn) public static void createSon() { // 創(chuàng)建文件工廠實(shí)例 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setIgnoringElementContentWhitespace( false ); try { DocumentBuilder db = dbf.newDocumentBuilder(); // 創(chuàng)建Document對(duì)象 Document xmldoc = db.parse(xmlPath); // 獲取根節(jié)點(diǎn) Element root = xmldoc.getDocumentElement(); // 創(chuàng)建節(jié)點(diǎn)son,設(shè)置對(duì)應(yīng)的id為004 Element son = xmldoc.createElement( "son" ); son.setAttribute( "id" , "004" ); // 創(chuàng)建節(jié)點(diǎn)name Element name = xmldoc.createElement( "name" ); name.setTextContent( "小兒子" ); son.appendChild(name); // 創(chuàng)建節(jié)點(diǎn)age Element age = xmldoc.createElement( "age" ); age.setTextContent( "0" ); son.appendChild(age); // 把son添加到根節(jié)點(diǎn)中 root.appendChild(son); // 保存 TransformerFactory factory = TransformerFactory.newInstance(); Transformer former = factory.newTransformer(); former.transform( new DOMSource(xmldoc), new StreamResult( new File( xmlPath))); } catch (Exception e) { System.out.println(e.getMessage()); } } // 修改節(jié)點(diǎn)信息 public static Node selectSingleNode(String express, Element source) { Node result = null ; //創(chuàng)建XPath工廠 XPathFactory xpathFactory = XPathFactory.newInstance(); //創(chuàng)建XPath對(duì)象 XPath xpath = xpathFactory.newXPath(); try { result = (Node) xpath.evaluate(express, source, XPathConstants.NODE); System.out.println(result); } catch (XPathExpressionException e) { System.out.println(e.getMessage()); } return result; } // 打印 public static void main(String[] args) { getFamilyMemebers(); System.out.println( "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ); modifySon(); System.out.println( "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ); System.out.println( "修改數(shù)據(jù)" ); getFamilyMemebers(); System.out.println( "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ); discardSon(); System.out.println( "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ); System.out.println( "刪除數(shù)據(jù)" ); getFamilyMemebers(); System.out.println( "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ); createSon(); System.out.println( "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ); System.out.println( "添加數(shù)據(jù)" ); getFamilyMemebers(); } } |
XML文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<? xml version = "1.0" encoding = "UTF-8" standalone = "no" ?> < father > < son id = "001" > < name >老大</ name > < age >20</ age > </ son > < son id = "002" > < name >老二</ name > < age >18</ age > </ son > < son id = "003" > < name >老三</ name > < age >13</ age > </ son > </ father > |
總結(jié)
以上就是本文關(guān)于java使用DOM對(duì)XML文檔進(jìn)行增刪改查操作實(shí)例代碼的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
原文鏈接:http://blog.csdn.net/zc2274460/article/details/51182536