一、简介

1、使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作。

2、去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种。

3、学习XPath语法。

二、XPath语法

1、基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径。

2、如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)

3、星号 * 表示选择所有由星号之前的路径所定位的元素

4、方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而last()函数则表示选择集中的最后一个元素.

5、@符号用于选择属性

6、属性的值可以被用来作为选择的准则, normalize-space函数删除了前部和尾部的空格, 并且把连续的空格串替换为一个单一的空格

7.count()函数可以计数所选元素的个数

8.name()函数返回元素的名称, start-with()函数在该函数的第一个参数字符串是以第二个参数字符开始的情况返回true, contains()函数当其第一个字符串参数包含有第二个字符串参数时返回true.

方法:name()函数返回元素的名称, start-with()函数在该函数的第一个参数字符串是以第二个参数字符开始的情况返回true, contains()函数当其第一个字符串参数包含有第二个字符串参数时返回true.

9.string-length函数返回字符串的字符数,你应该用&lt;替代<, 用&gt;代替>
10.多个路径可以用分隔符 | 合并在一起
 
三、使用XPath、Dom4j解析XML文档可以大大减少工作量。
1、Book类:  
  1. package p00.domain;
  2.  
  3. public class Book {
  4. public String title;
  5. public double price;
  6. public String id;
  7. public String getId()
  8. {
  9. return id;
  10. }
  11. public void setId(String id)
  12. {
  13. this.id=id;
  14. }
  15. public String getTitle()
  16. {
  17. return title;
  18. }
  19. public double getPrice()
  20. {
  21. return price;
  22. }
  23. public void setTitle(String title)
  24. {
  25. this.title=title;
  26. }
  27. public void setPrice(double price)
  28. {
  29. this.price=price;
  30. }
  31. public String toString()
  32. {
  33. return "图书ISBN为:"+id+" 书名为:"+title+" 价格为:"+price;
  34. }
  35.  
  36. }

写入新文档的公共方法:

  1. /**
  2. * 将得到的xml文档写入新的xml文档
  3. * @param document
  4. * @throws Exception
  5. */
  6. private static void writeToXMLDocument(Document document) throws Exception {
  7. FileOutputStream fos=new FileOutputStream(new File("xmldata/newbooks.xml"));
  8. OutputStreamWriter osw=new OutputStreamWriter(fos,"utf-8");
  9. /**
  10. *使用这种写法才不会产生乱码
  11. */
  12. XMLWriter writer=new XMLWriter(osw);
  13. writer.write(document);
  14. writer.close();
  15. }

books.xml文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <books>
  3. <book id="book1">
  4. <title>JAVA编程思想</title>
  5. <price>80.00</price>
  6. </book>
  7. <book id="book2">
  8. <title>JAVA核心技术</title>
  9. <price>100.00</price>
  10. </book>
  11. </books>

2、查询

功能:查找id为book2的元素的title子元素并将其值显示出来

  1. /**
  2. * 显示指定的子元素值
  3. * @param document
  4. */
  5. private static void showDesignatedElementValue(Document document) {
  6. String pattern="//book[@id='book2']/title";
  7. Node node=document.selectSingleNode(pattern);
  8. String title=node.getText();
  9. System.out.println(title);
  10. }

运行效果:

3、修改。

功能:修改id为book2的元素的子元素title使其为JAVA Core。

  1. /**
  2. * 完成修改功能。
  3. * @param document
  4. */
  5. private static void updateDesignatedElementValue(Document document) {
  6. String pattern="//book[@id='book2']/title";
  7. Node node=document.selectSingleNode(pattern);
  8. node.setText("JAVA Core");
  9. }

运行效果:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <books>
  3. <book id="book1">
  4. <title>JAVA编程思想</title>
  5. <price>80.00</price>
  6. </book>
  7. <book id="book2">
  8. <title>JAVA Core</title>
  9. <price>100.00</price>
  10. </book>
  11. </books>

4、删除

功能:删除id为book2的元素

  1. /**
  2. * 完成删除功能
  3. * @param document
  4. */
  5. private static void deleteDesignatedElement(Document document) {
  6. String pattern="//book[@id='book2']";
  7. Node book=document.selectSingleNode(pattern);
  8. Element parrent=book.getParent();
  9. parrent.remove(book);
  10. }

效果图:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <books>
  3. <book id="book1">
  4. <title>JAVA编程思想</title>
  5. <price>80.00</price>
  6. </book>
  7.  
  8. </books>

四、总结

很明显,代码量又大大减少了,使用XPath解析XML文件比起单纯使用dom4j解析XML文件效率更高,实用性很强,应当重点注意,尽量使用该方法解析XML文件。

【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】的更多相关文章

  1. 转:在java中使用dom4j解析xml

    JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...

  2. Android平台中实现对XML的三种解析方式

    本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...

  3. Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密

    Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密 二.利用加密算法DES实现java代码加密 传统的C/C++自动带有保护机制,但java不同,只要 ...

  4. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  6. java中利用dom4j解析XML文件

    官网下载Dom4j地址:https://dom4j.github.io/ 注意:使用Dom4j开发,需下载dom4j相应的jar文件 题目:后台利用dom4j解析student.xml文件,并返回Li ...

  7. 【JAVA与DOM4J实现对XML文档的CRUD操作】

    一.简介 1.网上下载DOM4J 1.6.1压缩包,解压开之后,发现几个目录和一个jar文件,jar文件是必须的文件其它目录: docs目录:帮助文档的目录,单击index.html: Quick s ...

  8. JDOM方法实现对XML文件的解析

    首先要下载JDOM.jar包,下载地址:http://download.csdn.net/detail/ww6055/8880371 下载到JDOM.jar包之后导入到工程中去. 实例程序: book ...

  9. 用DOM4J包实现对xml文件按属性分离。

    转自本人博客:http://www.xgezhang.com/dom4j_xml_separata.html dom4j是一个Java的XML API.类似于jdom.用来读写XML文件的. dom4 ...

随机推荐

  1. HDU 1003 动态规划

    http://acm.hdu.edu.cn/showproblem.php?pid=1003 这几天开始刷动归题目,先来一道签到题 然而做的并不轻松, 没有注意到边界问题, WA了几发才发现 #inc ...

  2. 读书笔记-js

    定义描述类名或者方法名的注解:ClassOrMethodFullName.java [写一个js方法] 1 2 3 function alertdemo() { // }; function + 方法 ...

  3. 网络数据包发送工具PacketSender中文源码

    在网上发现了一个好用的工具PacketSender,数据包发送器.对于写网络程序来说,有很大的便利性.虽然在linux下,netcat工具也很好用,但是这个也不错. 原本是英文的,给翻译了一下.这是基 ...

  4. js之序列化、eval和Date类用法

    序列化 JSON.stringify() 将对象转换为字符串 JSON.parse() 将字符串转换为对象类型 示例 var jsonStr = '{"name":"le ...

  5. Python自动化装饰器问题解疑

    问题一 到底是怎么执行的? import time def timer(timeout=0): def decorator(func): def wrapper(*args, **kwargs): # ...

  6. __getattr__ 与动态属性

    直接上代码 >>> class Test(object): ... def __getattr__(self,attr_name): ... setattr(self, attr_n ...

  7. vm10.0key

    5F4EV-4Z0DP-XZHN9-0L95H-02V17

  8. 手动fsck修复

    [转自]http://blog.chinaunix.net/uid-26719405-id-3781541.html 由于硬盘常年读写,系统会造成系统文件损坏,导致重启后无法登陆到系统, fsck不仅 ...

  9. poj1177

    题意:在平面直角坐标系内给出一些与坐标轴平行的矩形,将这些矩形覆盖的区域求并集,然后问这个区域的周长是多少.(边与边重合的地方不计入周长) 分析:线段树.曾经做过类似的求矩形覆盖的总面积的题.这道题同 ...

  10. 11. javacript高级程序设计-DOM扩展

    1. DOM扩展 1.1 选择符API l querySelector() 接收一个css选择符,返回与该模式匹配的第一个元素 l querySelectorAll() 接收一个css选择符,返回所有 ...