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 }