Dom4j 操作, 节点查找 添加 删除 修改 。。。xPath

时间:2023-03-08 23:51:53
Dom4j 操作, 节点查找 添加 删除 修改 。。。xPath

转:

Dom4j 操作, 节点查找 添加 删除 修改 。。。xPath

2013年11月28日 10:48:59 今晚打酱油8 阅读数:8506更多
个人分类: JavaWeb
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.****.net/xj626852095/article/details/17002321

Dom4j 说明文档:http://blog.****.net/xj626852095/article/details/17000741

xPath说明文档: http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html

要解析的xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <书架>
  3. <书 name="yyyyyyy">
  4. <书名>Java</书名>
  5. <作者>张三</作者>
  6. <打折价>9.9折</打折价>
  7. <售价>只要998</售价>
  8. </书>
  9. <书 memony="有优惠价">
  10. <书名 name="xxxxx">JavaScript网页开发</书名>
  11. <作者>李四</作者>
  12. <售价>28.00元</售价>
  13. <优惠价>8折</优惠价>
  14. <优惠价>8折</优惠价>
  15. <优惠价>8折</优惠价>
  16. </书>
  17. <user username="kevin" passwd="123456"/>
  18. <user username="xiang" passwd="234567"/>
  19. </书架>
  1. package com.kevin.java;
  2. import static org.junit.Assert.*;
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.io.OutputStreamWriter;
  8. import java.util.List;
  9. import org.dom4j.Document;
  10. import org.dom4j.DocumentException;
  11. import org.dom4j.DocumentHelper;
  12. import org.dom4j.Element;
  13. import org.dom4j.Node;
  14. import org.dom4j.io.OutputFormat;
  15. import org.dom4j.io.SAXReader;
  16. import org.dom4j.io.XMLWriter;
  17. import org.junit.Test;
  18. import org.xml.sax.DocumentHandler;
  19. public class Dom4j_Test {
  20. //Xpath使用
  21. @Test
  22. public void test4() throws DocumentException, IOException {
  23. SAXReader reader = new SAXReader();
  24. Document document = reader.read(new File("src/book1.xml"));
  25. String bookName = document.selectSingleNode("//书名").getText();
  26. System.out.println("bookName: " + bookName);
  27. //查找符合条件的User //BBB[@id='b1'] 注意要有单引号
  28. String username = "kevin";
  29. String passwd = "123456";
  30. Node node = document.selectSingleNode
  31. ("//user[@username='"+username+"' and @passwd='"+passwd+"']");
  32. if(node==null)
  33. System.out.println("不是注册用户");
  34. else
  35. System.out.println("注册用户");
  36. }
  37. //获得第二本数的书名, 属性值 , 添加售价节点
  38. @Test
  39. public void test1() throws DocumentException, IOException {
  40. SAXReader reader = new SAXReader();
  41. Document document = reader.read(new File("src/book1.xml"));
  42. Element root = document.getRootElement();
  43. Element book = root.elements("书").get(1);
  44. String bookName = book.element("书名").getText();
  45. String bookAttr = book.element("书名").attributeValue("name");
  46. System.out.println("bookName: " + bookName);
  47. System.out.println("bookAttr: " + bookAttr);
  48. //添加售价节点
  49. book.addAttribute("memony", "有优惠价");
  50. book.addElement("优惠价").setText("8折");
  51. OutputFormat format = OutputFormat.createPrettyPrint();
  52. format.setEncoding("UTF-8");
  53. XMLWriter writer = new XMLWriter(
  54. new OutputStreamWriter(new FileOutputStream("src/book1.xml")), format);
  55. writer.write(document);
  56. writer.close();
  57. }
  58. //指定位置添加
  59. @Test
  60. public void test2() throws DocumentException, IOException {
  61. SAXReader reader = new SAXReader();
  62. Document document = reader.read(new File("src/book1.xml"));
  63. Element book = document.getRootElement().element("书");
  64. List list = book.elements();
  65. Element price = DocumentHelper.createElement("打折价");
  66. price.setText("9.9折");
  67. list.add(2, price);
  68. OutputFormat format = OutputFormat.createPrettyPrint();
  69. format.setEncoding("UTF-8");
  70. XMLWriter writer = new XMLWriter(
  71. new OutputStreamWriter(new FileOutputStream("src/book1.xml")), format);
  72. writer.write(document);
  73. writer.close();
  74. }
  75. //删除节点 更新节点
  76. @Test
  77. public void test3() throws DocumentException, IOException {
  78. SAXReader reader = new SAXReader();
  79. Document document = reader.read(new File("src/book1.xml"));
  80. Element priceTmp = document.getRootElement().element("书").element("打折价");
  81. //删除节点
  82. priceTmp.getParent().remove(priceTmp);
  83. Element price = document.getRootElement().element("书").element("售价");
  84. //更新节点
  85. price.setText("只要998");
  86. OutputFormat format = OutputFormat.createPrettyPrint();
  87. format.setEncoding("UTF-8");
  88. XMLWriter writer = new XMLWriter(
  89. new OutputStreamWriter(new FileOutputStream("src/book1.xml")), format);
  90. writer.write(document);
  91. writer.close();
  92. }