Dom4j实现xml简单的增删改查功能

一个小故事:当年Java准备做对XML的解析时,对解析器的实现方向在内部发生了争执,后来高层没有听从工程师建议,坚持开发出了JDOM,而主要的工程师选择离开Java 按照自己的方式实现,就是DOM4J 。后来结果表明,DOM4J 完胜了JDOM。下面,让我们来了解一下通过DOM4J 实现对XML文件进行增删改查的过程。

1、待解析的XML文件:

[html]  view plain  copy
  1. <span style="font-size:14px;">  
  2. <?xml version="1.0" encoding="utf-8"?>  
  3.   
  4. <students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.         xmlns="http://www.itcast.cn/xml"  
  6.             xsi:schemaLocation="http://www.itcast.cn/xml students.xsd">  
  7.     <student number="ITCAST_1001">  
  8.       <name>zhangSan</name>  
  9.       <age>23</age>  
  10.       <sex>male</sex>  
  11.     </student>  
  12. </students>  
  13.   
  14. </span>  

2、用DOM4J实现增删改查:
[java]  view plain  copy
  1. <span style="font-size:14px;">  
  2. public class Demo3 {  
  3.   
  4.     @Test  
  5.     public void method1() throws Exception {  
  6.         // 创建解析器  
  7.         SAXReader reader = new SAXReader();//这个是用来读取文件内容的  
  8.         Document doc = reader.read(new File("students.xml")); //指定要读取的文件  
  9.         //System.out.println(doc.asXML()); //打印出文件  
  10.     }  
  11.       
  12.     //实现对XML文件的复制  
  13.     @Test  
  14.     public void method2() throws Exception {  
  15.         // 得到Document  
  16.         SAXReader reader = new SAXReader();  
  17.         Document doc = reader.read(new File("students.xml"));  
  18.           
  19.         // 保存Document,指定将写入的目的文件(复制功能)  
  20.         XMLWriter writer = new XMLWriter(new FileOutputStream("students_copy.xml"));  
  21.         writer.write(doc); //开始写入  
  22.     }  
  23.       
  24.     //遍历Document  
  25.     @Test  
  26.     public void method3() throws Exception {  
  27.         // 要遍历文档,首先要得到Document对象  
  28.         SAXReader reader = new SAXReader();  
  29.         Document doc = reader.read(new File("students.xml"));  
  30.   
  31.         //获取根元素  
  32.         Element root = doc.getRootElement();  
  33.         //获取根元素中所有student元素  
  34.         List<Element> stuEleList = root.elements("student");  
  35.         // 循环遍历所有学生元素  
  36.         for(Element stuEle : stuEleList) {  
  37.             //获取学生元素的number  
  38.             String number = stuEle.attributeValue("number");  
  39.             //获取学生元素名为name的子元素的文本内容  
  40.             String name = stuEle.elementText("name");  
  41.             //获取学生元素名为age的子元素的文本内容  
  42.             String age = stuEle.elementText("age");  
  43.             //获取学生元素名为sex的子元素的文本内容  
  44.             String sex = stuEle.elementText("sex");       
  45.             System.out.println(number + ", " + name + ", " + age + ", " + sex);  
  46.         }  
  47.     }  
  48.       
  49.     //添加元素  
  50.     @Test  
  51.     public void method4() throws Exception {  
  52.         // 得到Document  
  53.         SAXReader reader = new SAXReader();  
  54.         Document doc = reader.read(new File("src/students.xml"));  
  55.   
  56.         //获取root元素  
  57.         Element root = doc.getRootElement();  
  58.         Element stuEle = root.addElement("student"); //添加了student元素  
  59.         // 给stuEle添加属性,名为number,值为1003  
  60.         stuEle.addAttribute("number""1003");   
  61.         // 分别为stuEle添加名为name、age、sex的子元素,并为子元素设置文本内容  
  62.         stuEle.addElement("name").setText("wangWu");  
  63.         stuEle.addElement("age").setText("18");  
  64.         stuEle.addElement("sex").setText("male");  
  65.           
  66.         // 设置保存的格式化器  1. \t,使用什么来完成缩进 2. true, 是否要添加换行  
  67.         OutputFormat format = new OutputFormat("\t"true);  
  68.         format.setTrimText(true); //去掉空白  
  69.         // 在创建Writer时,指定格式化器  
  70.         XMLWriter writer = new XMLWriter(new FileOutputStream("src/students_copy.xml"), format);  
  71.         writer.write(doc);  
  72.     }  
  73.       
  74.     //修改元素  
  75.     @Test  
  76.     public void method5() throws Exception {  
  77.   
  78.         // 得到Document  
  79.         SAXReader reader = new SAXReader();  
  80.         Document doc = reader.read(new File("src/students_copy.xml"));  
  81.   
  82.         //使用XPath找到符合条件的元素  
  83.         // 查询student元素,条件是number属性的值为1003  
  84.         Element stuEle = (Element) doc.selectSingleNode("//student[@number='ITCAST_1003']");  
  85.         //修改stuEle的age子元素内容为81  
  86.         stuEle.element("age").setText("81");  
  87.         //修改stuEle的sex子元素的内容为female  
  88.         stuEle.element("sex").setText("female");  
  89.   
  90.     }  
  91.       
  92.     //删除元素  
  93.     @Test  
  94.     public void method6() throws Exception {  
  95.   
  96.         // 得到Document  
  97.         SAXReader reader = new SAXReader();  
  98.         Document doc = reader.read(new File("src/students_copy.xml"));  
  99.           
  100.         // 查找student元素,条件是name子元素的文本内容为wangWu  
  101.         Element stuEle = (Element) doc.selectSingleNode("//student[name='wangWu']");  
  102.           
  103.         // 2. 获取父元素,使用父元素删除指定子元素  
  104.         stuEle.getParent().remove(stuEle);  
  105.     }  
  106. }  
  107.  </span>  
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值