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

转:

 

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xj626852095/article/details/17002321

Dom4j 说明文档:http://blog.csdn.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. <书架>
  4. <name="yyyyyyy">
  5. <书名>Java</书名>
  6. <作者>张三</作者>
  7. <打折价>9.9折</打折价>
  8. <售价>只要998</售价>
  9. </书>
  10. <memony="有优惠价">
  11. <书名 name="xxxxx">JavaScript网页开发</书名>
  12. <作者>李四</作者>
  13. <售价>28.00元</售价>
  14. <优惠价>8折</优惠价>
  15. <优惠价>8折</优惠价>
  16. <优惠价>8折</优惠价>
  17. </书>
  18. <user username="kevin" passwd="123456"/>
  19. <user username="xiang" passwd="234567"/>
  20. </书架>

 

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

转载于:https://www.cnblogs.com/libin6505/p/10120468.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值