Dom4j向XML中指定位置添加、删除、修改节点——(五)

需求:

  在第一本书作者后面增加描述 <描述>好书</描述> 

  思路:获取书下面下的所有节点(一个list集合),在list集合指定位置添加一个元素(list.add(index,object)),最后写入原xml文档。

原来XML文档

 1 <?xml version="1.0" encoding="utf-8"?>
 2 
 3 <书架> 
 4   <> 
 5     <书名>Java高级</书名>  
 6     <作者>武陟县</作者>  
 7     <价格>200元</价格> 
 8   </>  
 9   <> 
10     <书名 name="xxxxxxxxxxx">Java中级</书名>  
11     <作者>打火机</作者>  
12     <价格>2000元</价格> 
13   </> 
14 </书架>

 -------------------------------------------------------指定位置添加节点-------------------------------------

Java代码:

 1 // 在指定位置添加一个节点     
 2         @Test
 3         public void test2() throws Exception {
 4             SAXReader reader = new SAXReader();
 5             Document document = reader.read(new File("src/book.xml"));
 6             Element root = document.getRootElement();
 7             
 8 //            获取第一个书节点
 9             Element shu = (Element) root.elements("书").get(0);
10 //            获取第一个节点下的所有节点
11             List list = shu.elements();   //[书名,作者,价格]
12             
13 //            创建一个节点
14             Element miaoshu = DocumentHelper.createElement("miaoshu");
15             miaoshu.setText("一本好书");
16             list.add(2,miaoshu);
17             
18 //            格式化输出流,同时指定编码格式。也可以在FileOutputStream中指定。
19             OutputFormat format = OutputFormat.createPrettyPrint();
20             format.setEncoding("utf-8");
21 
22             XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
23             writer.write(document);
24             writer.close();
25         }

结果:

<?xml version="1.0" encoding="utf-8"?>

<书架> 
  <> 
    <书名>Java高级</书名>  
    <作者>武陟县</作者>  
    <miaoshu>一本好书</miaoshu>
    <价格>200元</价格> 
  </>  
  <> 
    <书名 name="xxxxxxxxxxx">Java中级</书名>  
    <作者>打火机</作者>  
    <价格>2000元</价格> 
  </> 
</书架>

-----------------------------------------删除节点----------------------------------------------

 1     // 删除节点
 2     @Test
 3     public void delete() throws Exception {
 4         SAXReader reader = new SAXReader();
 5         Document document = reader.read(new File("src/book.xml"));
 6         Element root = document.getRootElement();
 7 
 8         // 获取第一个书节点
 9         Element shu = (Element) root.elements("书").get(0);
10         Element miaoshu = (Element) shu.element("miaoshu");
11         // 获取到miaoshu节点的父节点并删除miaoshu节点
12         miaoshu.getParent().remove(miaoshu);
13 
14         // 格式化输出流,同时指定编码格式。也可以在FileOutputStream中指定。
15         OutputFormat format = OutputFormat.createPrettyPrint();
16         format.setEncoding("utf-8");
17 
18         XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"), format);
19         writer.write(document);
20         writer.close();
21 
22     }

结果:

<?xml version="1.0" encoding="utf-8"?>

<书架> 
  <> 
    <书名>Java高级</书名>  
    <作者>武陟县</作者>  
    <价格>200元</价格> 
  </>  
  <> 
    <书名 name="xxxxxxxxxxx">Java中级</书名>  
    <作者>打火机</作者>  
    <价格>2000元</价格> 
  </> 
</书架>

-------------------------------------修改节点-------------------------------------------------

 1     // 修改节点
 2     @Test
 3     public void update() throws Exception {
 4         SAXReader reader = new SAXReader();
 5         Document document = reader.read(new File("src/book.xml"));
 6         Element root = document.getRootElement();
 7 
 8         // 获取第一个书节点
 9         Element shu = (Element) root.elements("书").get(0);
10         Element shuming = (Element) shu.element("书名");
11         // 获取到miaoshu节点的父节点并删除miaoshu节点
12         shuming.setText("一本烂书!!");
13 
14         // 格式化输出流,同时指定编码格式。也可以在FileOutputStream中指定。
15         OutputFormat format = OutputFormat.createPrettyPrint();
16         format.setEncoding("utf-8");
17 
18         XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"), format);
19         writer.write(document);
20         writer.close();
21 
22     }

结果:

<?xml version="1.0" encoding="utf-8"?>

<书架> 
  <> 
    <书名>一本烂书!!</书名>  
    <作者>武陟县</作者>  
    <价格>200元</价格> 
  </>  
  <> 
    <书名 name="xxxxxxxxxxx">Java中级</书名>  
    <作者>打火机</作者>  
    <价格>2000元</价格> 
  </> 
</书架>
原文地址:https://www.cnblogs.com/qlqwjy/p/7279143.html