2.3 使用 dom4j 对 xml文件进行 dom 解析

  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 }
原文地址:https://www.cnblogs.com/xuzekun/p/7356136.html