zoukankan      html  css  js  c++  java
  • 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元</价格> 
      </> 
    </书架>
  • 相关阅读:
    线性表的实现用通用方法实现线性表的初始化、求表长、插入元素、删除元素等
    用c++定义两个坐标点,计算两点间距离;进而计算线段的面积
    Java:学生信息的录入,各种排序,对文件的操作
    数组1 2 3 4 5 6 1(输入-1结束),奇数位的数逆序,偶数位数不变
    按层次遍历二叉树,用队列作为缓冲
    Chapter09"内核模式下的线程同步"之事件内核对象
    Chapter10“I/O设备的同步和异步”之打开和关闭设备
    CSDN博客积分系统
    探秘Java垃圾回收机制
    Chapter09“内核模式下的线程同步”之可等待的计时器内核对象
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/7279143.html
Copyright © 2011-2022 走看看