java xpath 解析xml_【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

一、简介

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

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

3、学习XPath语法。

二、XPath语法

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

f06ffe3adffc82cb5f9cea2297c5c6aa.png

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

987d97fdf40a521ff57f28b8957c6022.png

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

0ee543218b5f3c05ba41b306c38ae12e.png

ec7a0e2dd83ea6c284cf213e769e57c0.png

04138d67db72d4aa565235a8f1d28d61.png

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

5ec3f8dba4e17071ec258a6e70a330ba.png

abb9065ffaf978ab6045ee970b7aa78a.png

5、@符号用于选择属性

bf8cca18c0c96935a9cc0e0324630727.png

9e6e8199b31a2d5651f1d584e00484fa.png

43745de5afb3cfe3c69b0e5b0b6bad10.png

0f344230c581d5c85c8c16ca199f7183.png

0fb4d1d6ab9dc9839ed78d6a63db3bbf.png

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

6ad0c77599538533ad1067b916897fae.png

008e3148ddefc4ce30352b9ad706ba07.png

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

ff9e1be3cc3f21c7d3e7b51a0c0d6b9c.png

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

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

4ed06061d9c293a5ebe75320c341c960.png

f2dc56ce48123d08f50bfaa4170f7d84.png

4b40315179604c4084f8fe8bb87da444.png

9.string-length函数返回字符串的字符数,你应该用<替代

129f662b3b11098c77ebcf45a924632f.png

10.多个路径可以用分隔符 | 合并在一起

839eca1258536d20faca283cffb76fa4.png

三、使用XPath、Dom4j解析XML文档可以大大减少工作量。

1、Book类:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagep00.domain;2

3 public classBook {4 publicString title;5 public doubleprice;6 publicString id;7 publicString getId()8 {9 returnid;10 }11 public voidsetId(String id)12 {13 this.id=id;14 }15 publicString getTitle()16 {17 returntitle;18 }19 public doublegetPrice()20 {21 returnprice;22 }23 public voidsetTitle(String title)24 {25 this.title=title;26 }27 public void setPrice(doubleprice)28 {29 this.price=price;30 }31 publicString toString()32 {33 return "图书ISBN为:"+id+" 书名为:"+title+" 价格为:"+price;34 }35

36 }

View Code

写入新文档的公共方法:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 /**

2 * 将得到的xml文档写入新的xml文档3 *@paramdocument4 *@throwsException5 */

6 private static void writeToXMLDocument(Document document) throwsException {7 FileOutputStream fos=new FileOutputStream(new File("xmldata/newbooks.xml"));8 OutputStreamWriter osw=new OutputStreamWriter(fos,"utf-8");9 /**

10 *使用这种写法才不会产生乱码11 */

12 XMLWriter writer=newXMLWriter(osw);13 writer.write(document);14 writer.close();15 }

View Code

books.xml文件:

JAVA编程思想

80.00

JAVA核心技术

100.00

2、查询

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 /**

2 * 显示指定的子元素值3 *@paramdocument4 */

5 private static voidshowDesignatedElementValue(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 }

View Code

运行效果:

46530d72a0c98bdd7b5e494992a892ae.png

3、修改。

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 /**

2 * 完成修改功能。3 *@paramdocument4 */

5 private static voidupdateDesignatedElementValue(Document document) {6 String pattern="//book[@id='book2']/title";7 Node node=document.selectSingleNode(pattern);8 node.setText("JAVA Core");9 }

View Code

运行效果:

JAVA编程思想

80.00

JAVA Core

100.00

4、删除

功能:删除id为book2的元素

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 /**

2 * 完成删除功能3 *@paramdocument4 */

5 private static voiddeleteDesignatedElement(Document document) {6 String pattern="//book[@id='book2']";7 Node book=document.selectSingleNode(pattern);8 Element parrent=book.getParent();9 parrent.remove(book);10 }

View Code

效果图:

JAVA编程思想

80.00

四、总结

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值