转:

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. (转)使用Python和OpenCV检测图像中的物体并将物体裁剪下来

    原文链接:https://blog.csdn.net/liqiancao/article/details/55670749 介绍 硕士阶段的毕设是关于昆虫图像分类的,代码写到一半,上周五导师又给我新的 ...

  2. XSS留言板实现

    XSS 留言板实现-笔记 预备知识 XSS漏洞 XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS ...

  3. 基于preteus的1602液晶显示器的学习(LM016L)

    (证明学过,以示纪念) 所谓1602就是每行可以显示16个字符,可以显示两行.1602液晶在工业中使用比较广泛,其基本都采用的是HD44780控制器,或者兼容该指令集,因此基于HD44780写的控制程 ...

  4. java 乐观锁 vs 悲观锁

    在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性. 悲观锁其实就是 完全同步 比如 sync ...

  5. python中取整的几种方法

    #encoding:utf-8import math #向上取整print "math.ceil---"print "math.ceil(2.3) => " ...

  6. Divide by three, multiply by two(DFS+思维)

    Polycarp likes to play with numbers. He takes some integer number x, writes it down on the board, an ...

  7. 基于DPDK的高效数据包捕获技术分析与应用

    被NFV的论文折磨了两天,今天上午看了两篇DPDK的综述. 传统的包捕获机制 1. BPF 两个组成部分:转发部分和过滤部分. 转发部分负责从链路层提取数据包并转发给过滤部分. 过滤部分根据过滤规则, ...

  8. HDU 5656 CA Loves GCD 01背包+gcd

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5656 bc:http://bestcoder.hdu.edu.cn/contests/con ...

  9. ASP.NET MVC 4 内容映射

    文章:ASP.NET MVC 4 内容映射 地址:https://msdn.microsoft.com/zh-cn/library/gg416514(v=vs.108).aspx 模型-视图-控制器 ...

  10. 通过js读取元素的样式

    /* * 通过元素.style.样式只能获取到内联样式的值,就是style写在元素里面的值,不能获取嵌入式和外联样式的值 * 所以如果要获取除内联样式后的值,就不能通过这个获取 * alert(box ...