1 import java.io.FileOutputStream;
2
3 import javax.xml.parsers.DocumentBuilder;
4 import javax.xml.parsers.DocumentBuilderFactory;
5 import javax.xml.parsers.ParserConfigurationException;
6 import javax.xml.transform.Transformer;
7 import javax.xml.transform.TransformerFactory;
8 import javax.xml.transform.dom.DOMSource;
9 import javax.xml.transform.stream.StreamResult;
10
11 import org.junit.Test;
12 import org.w3c.dom.Document;
13 import org.w3c.dom.Element;
14 import org.w3c.dom.Node;
15 import org.w3c.dom.NodeList;
16
17
18 //使用dom方式对xml文档进行crud
19 public class Demo2 {
20
21 @Test
22 public void read() throws Exception{
23
24 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
25 DocumentBuilder builder = factory.newDocumentBuilder();
26 Document document = builder.parse("src/book.xml");
27
28 NodeList list = document.getElementsByTagName("书名");
29 Node node = list.item(1);
30 String content = node.getTextContent();
31 System.out.println(content);
32
33 }
34
35 @Test
36 public void read2() throws Exception{
37
38 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
39 DocumentBuilder builder = factory.newDocumentBuilder();
40 Document document = builder.parse("src/book.xml");
41
42 //得到根节点
43 Node root = document.getElementsByTagName("书架").item(0);
44 list(root);
45 }
46
47 private void list(Node node) {
48 if(node instanceof Element){
49 System.out.println(node.getNodeName());
50 }
51 NodeList list = node.getChildNodes();
52
53 for(int x=0;x<list.getLength()-1;x++){
54 Node child = list.item(x);
55 list(child);
56 //System.out.println(child.getTextContent());
57 }
58
59 }
60
61 //得到xml文档中标签属性值:<书名 name="xxxx">Java就业培训教程</书名>
62 @Test
63 public void read3() throws Exception{
64
65 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
66 DocumentBuilder builder = factory.newDocumentBuilder();
67 Document document = builder.parse("src/book.xml");
68
69 //得到根节点
70 Element bookname = (Element) document.getElementsByTagName("书名").item(0);
71 String value = bookname.getAttribute("name");
72 System.out.println(value);
73 }
74
75 //向xml文档中添加节点:<售价>59.00元</售价>
76 @Test
77 public void add() throws Exception{
78 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
79 DocumentBuilder builder = factory.newDocumentBuilder();
80 Document document = builder.parse("src/book.xml");
81
82 //创建节点
83 Element price =document.createElement("售价");
84 price.setTextContent("59.00元");
85
86 //把创建的节点挂到第一本书上
87 Element book = (Element) document.getElementsByTagName("书").item(0);
88 book.appendChild(price);
89
90 //把更新后内存写回xml中
91 TransformerFactory tffactory = TransformerFactory.newInstance();
92 Transformer tf = tffactory.newTransformer();
93 tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml")));
94
95 }
96
97 //向xml文档中指定位置上添加节点:<售价>59.00元</售价>
98 @Test
99 public void add2() throws Exception{
100 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
101 DocumentBuilder builder = factory.newDocumentBuilder();
102 Document document = builder.parse("src/book.xml");
103
104 //创建节点
105 Element price =document.createElement("售价");
106 price.setTextContent("59.00元");
107
108 //得到参考节点
109 Element refNode = (Element) document.getElementsByTagName("作者").item(1);
110
111 //得到要挂载的节点
112 Element book = (Element) document.getElementsByTagName("书").item(1);
113
114 //往book节点的指定位置插崽
115 book.insertBefore(price, refNode);
116
117 //把更新后内存写回xml中
118 TransformerFactory tffactory = TransformerFactory.newInstance();
119 Transformer tf = tffactory.newTransformer();
120 tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml")));
121
122 }
123
124
125 //向xml文档节点上添加属性:<书名>java就业培训教程</书名>上添加name="zero"属性
126 @Test
127 public void addAttr() throws Exception{
128 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
129 DocumentBuilder builder = factory.newDocumentBuilder();
130 Document document = builder.parse("src/book.xml");
131
132 Element bookname = (Element) document.getElementsByTagName("书名").item(0);
133 bookname.setAttribute("name", "zero");
134
135 //把更新后内存写回xml中
136 TransformerFactory tffactory = TransformerFactory.newInstance();
137 Transformer tf = tffactory.newTransformer();
138 tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml")));
139
140 }
141
142 @Test
143 public void delete() throws Exception{
144 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
145 DocumentBuilder builder = factory.newDocumentBuilder();
146 Document document = builder.parse("src/book.xml");
147
148 //得到要删除节点
149 Element e = (Element) document.getElementsByTagName("售价").item(1);
150 System.out.println(e);
151 //得到要删除的节点
152 Element book = (Element) document.getElementsByTagName("书").item(1);
153 System.out.println(book);
154 //父节点删子节点
155 book.removeChild(e);
156
157
158 //把更新后内存写回xml中
159 TransformerFactory tffactory = TransformerFactory.newInstance();
160 Transformer tf = tffactory.newTransformer();
161 tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml")));
162
163
164 }
165
166 //delete
167 @Test
168 public void delete2() throws Exception{
169 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
170 DocumentBuilder builder = factory.newDocumentBuilder();
171 Document document = builder.parse("src/book.xml");
172
173 //得到要删除节点
174 Element e = (Element) document.getElementsByTagName("售价").item(1);
175 e.getParentNode().getParentNode().removeChild(e.getParentNode());
176
177
178 //把更新后内存写回xml中
179 TransformerFactory tffactory = TransformerFactory.newInstance();
180 Transformer tf = tffactory.newTransformer();
181 tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml")));
182
183
184 }
185
186 //update
187 @Test
188 public void update() throws Exception{
189 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
190 DocumentBuilder builder = factory.newDocumentBuilder();
191 Document document = builder.parse("src/book.xml");
192
193 Element e = (Element) document.getElementsByTagName("售价").item(1);
194 e.setTextContent("168元");
195
196 //把更新后内存写回xml中
197 TransformerFactory tffactory = TransformerFactory.newInstance();
198 Transformer tf = tffactory.newTransformer();
199 tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml")));
200
201 }
202 }