1 // 使用dom4j对XML文档进行解析 CRUD
2 public class Demo1 {
3
4 //读取XML文档中第二本书的书名 <书名>javaWEB</书名>
5 @Test
6 public void read() throws Exception {
7 SAXReader reader = new SAXReader();
8 Document document = reader.read("src/book.xml");
9
10 //拿到第二本书这个标签
11 Element secondBook = (Element) document.getRootElement().elements("书").get(1);
12
13 //拿到书名
14 String bookName = secondBook.element("书名").getText(); //element 不带s 默认取第一个节点
15 // String bookName = secondBook.elementText("书名"); 也可以这样写
16
17 //拿到属性值
18 String value = secondBook.element("书名").attributeValue("name");
19
20 System.out.println(bookName + value);
21 }
22
23 //在第一本书添加标签 <售价>49.00元</售价>
24 @Test
25 public void add() throws Exception {
26 SAXReader reader = new SAXReader();
27 Document document = reader.read("src/book.xml");
28
29 //拿到第一本书
30 Element book = document.getRootElement().element("书");
31
32 //添加标签
33 book.addElement("售价").setText("49.00元");
34
35 //更新XML文档
36 //为了避免乱码问题 设置格式化输出器
37 OutputFormat format = OutputFormat.createPrettyPrint();
38 format.setEncoding("UTF-8");
39
40 //注意 如果用字节流 如:FileOutputStream,则只能依靠write去查码表 就可以设置输出的码表
41 //如果 用的是字符流 如:FileWriter 则调用write方法写document时 不会去查码表,而是这个字符流自己去查码表 默认查的是 gb2312
42 //所以 一般采用字节流,然后指定输出的码表
43 XMLWriter write = new XMLWriter(new FileOutputStream("src/book.xml"),format);
44 write.write(document);
45 write.close();
46
47 }
48 //在第一本书 指定位置上 添加标签<售价>49.00元</售价>
49 @Test
50 public void add2() throws Exception {
51 SAXReader reader = new SAXReader();
52 Document document = reader.read("src/book.xml");
53
54 Element book = document.getRootElement().element("书");
55
56 //dom4j在指定位置插入一个标签 要在List集合中完成 ,把指定的需添加的标签放到List集合中的指定位置,后面的标签 会自动往后排
57 List list = book.elements();
58 Element newElemenrt = DocumentHelper.createElement("售价");
59 newElemenrt.setText("49.00元");
60 list.add(1,newElemenrt);
61
62 OutputFormat format = OutputFormat.createPrettyPrint();
63 format.setEncoding("UTF-8");
64 XMLWriter write = new XMLWriter(new FileOutputStream("src/book.xml"),format);
65 write.write(document);
66 write.close();
67 }
68
69 //删除上面添加的售价节点(删除第一个出现的售价节点)
70 @Test
71 public void delete() throws Exception {
72 SAXReader reader = new SAXReader();
73 Document document = reader.read("src/book.xml");
74
75 Element element = document.getRootElement().element("书").element("售价");
76 element.getParent().remove(element);
77
78 OutputFormat format = OutputFormat.createPrettyPrint();
79 format.setEncoding("UTF-8");
80 XMLWriter write = new XMLWriter(new FileOutputStream("src/book.xml"),format);
81 write.write(document);
82 write.close();
83 }
84
85 //更新第二本书的作者
86 @Test
87 public void update() throws Exception {
88
89 SAXReader reader = new SAXReader();
90 Document document = reader.read("src/book.xml");
91
92 Element book2 = (Element) document.getRootElement().elements("书").get(1);
93 book2.element("作者").setText("徐泽昆");
94
95 OutputFormat format = OutputFormat.createPrettyPrint();
96 format.setEncoding("UTF-8");
97 XMLWriter write = new XMLWriter(new FileOutputStream("src/book.xml"),format);
98 write.write(document);
99 write.close();
100 }
101 }