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元</价格> 
  </> 
</书架>
复制代码

 

posted @   QiaoZhi  阅读(6785)  评论(1编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示