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元</价格> 
  </> 
</书架>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值