转:

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

2013年11月28日 10:48:59 今晚打酱油8 阅读数:8506更多

个人分类: JavaWeb
 
版权声明:本文为博主原创文章,未经博主允许不得转载。 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.  

Dom4j 操作, 节点查找 添加 删除 修改 。。。xPath的更多相关文章

  1. dir(dict)|字典的创建-添加-删除-修改-判断存在-取值等相关操作

    dir(dict) ####字典操作:创建-添加-删除-修改-判断存在-取值 #(一)创建字典: {} .等号. zip(). [(),()] #1.创建空字典 dict0 = {} #2.等号创建 ...

  2. JavaScript学习 - 基础(八) - DOM 节点 添加/删除/修改/属性值操作

    html代码: <!--添加/删除/修改 --> <div id="a1"> <button id="a2" onclick=&q ...

  3. JTree 添加 , 删除, 修改

    package com.swing.demo; import java.awt.BorderLayout; import java.awt.Container; import java.awt.eve ...

  4. SQL语句添加删除修改字段及一些表与字段的基本操作

    用SQL语句添加删除修改字段 1.增加字段     alter table docdsp    add dspcode char(200)2.删除字段     ALTER TABLE table_NA ...

  5. 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等

    用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200) 2.删除字段 ALTER TABLE table_NAME DROP CO ...

  6. SQL语句添加删除修改字段[sql server 2000/2005]

    用SQL语句添加删除修改字段1.增加字段     alter table docdsp    add dspcodechar(200)2.删除字段     ALTER TABLE table_NAME ...

  7. SQL语句添加删除修改字段

    用SQL语句添加删除修改字段1.增加字段     alter table docdsp    add dspcodechar(200)2.删除字段     ALTER TABLE table_NAME ...

  8. Entity framework 绑定到Datagridview的添加删除修改

    Entity framework 绑定到Datagridview的添加删除修改 using System; using System.Collections.Generic; using System ...

  9. 节点操作-创建并添加&删除节点&替换&克隆节点

    <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" ...

随机推荐

  1. RyuBook1.0案例一:Switching Hub项目源码分析

    开发目标 实现一个带MAC地址学习功能的二层交换机 Openflow交换机与Openflow控制器安全通道建立步骤 switch and controller建立未加密TCP连接或者加密的TLS连接 ...

  2. Select 、Poll 和 Epoll

    作用 Epoll 和 Select 的作用都是为了多I/O同步复用的问题,利用Epoll.Poll或Select函数指定内核监听多个I/O的读.写.异常事件,避免每一个I/O都指定一个处理线程,导致开 ...

  3. PostgreSQL9.6主从配置

    参考文档: 备机日志传送:https://www.postgresql.org/docs/9.6/static/warm-standby.html 英文文档:https://www.postgresq ...

  4. eos合约案例导读

    为了帮助大家熟悉 EOS 智能合约,EOS 官方提供了一个代币(资产)智能合约 Demo -- eosio.token.eosio.token 智能合约目前还不是特别完善,个别功能还没有完成.但这个示 ...

  5. Fedora 26/27/28网易云音乐安装

    信息从 https://www.southcity-oldboy.com/1474.html获取,感谢站长南城旧少年! 以下为前辈网页上的内容 1.安装 RPM Fusion 源 (free): ht ...

  6. mac 安装配置使用nexus3.x

    一.nexus安装 前置条件 :已经安装了JDK 1:下载nexus(http://www.sonatype.com/download-oss-sonatype) 最新版本3.0,下载目录为/User ...

  7. 感谢——Thunder团队

    团队软件的开发,已经进入第二个阶段——Beta版本了.回头看看,我们走过了很长的一段路,也经历了很多,有意见不一的争吵.有取得暂时成功时的欢欣鼓舞,我们就像一家人,就像那首歌中唱到的,“我们是一家人, ...

  8. NSURLErrorDomain错误代码

    kCFURLErrorUnknown = -998, kCFURLErrorCancelled = -999, kCFURLErrorBadURL = -1000, kCFURLErrorTimedO ...

  9. TCP系列43—拥塞控制—6、Congestion Window Validation(CWV)

    一.概述 在RFC2861中,区分了TCP连接数据传输的三种状态   After sending a data segment:       If tcpnow - T_last >= RTO ...

  10. Scrum团队成立及《构建之法》第六、七章读后感

    5.Scrum团队成立 5.1 团队名称:喳喳      团队目标:突破渣渣      团队口号:吱吱喳喳      团队照: 5.2 角色分配 产品负责人: 112冯婉莹 Scrum Master: ...