最近感觉xml的用处挺大的,特别是在数据交互的时候,比如ajax从后台取的数据,就可以得到一个xml文本,还有在很多框架的配置都是用xml进行配置,所以懂得如何从xml提取所需要的信息很重要,在网上学习了一下XPath,虽然网上都有,但是自己还是想整理一下,留着日后用用到时可以参考一下。
一、什么是XPath
XPath 使用路径表达式在 XML 文档中进行导航,确切的说它是一个标准的路径,根据该路径可以解析出xml文档里面的信息。
二、xml基本语法。
1、xml文档
<?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> <title lang="eng">Learning XML</title> <price>39.95</price> </book> </bookstore>
2、选取节点
表达式 功能
nodename 选取此节点的所有节点
/ 从根节点开始选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性
3、列子
bookstore 选取bookstore节点的所有节点
bookstore/book 选取bookstore节点下的所以book节点
//book 选取所有的book节点,而不管它们在文档中的位置
bookstore//book 选取bookstore节点下的所有book节点
//@lang 选取属性为lang的节点
3、谓语
/bookstore/book[1] 选取bookstore下的第一个book节点
/bookstore/book[last()] 选取bookstore节点下的最后一个book节点
/bookstore/book[position()<3] 选取bookstore节点下的第一和第二个节点
//title[@lang] 选取属性为lang的所有title节点
//title[@lang='eng'] 选取属性为lang并且值为eng的所以title节点
/bookstore/book[price<32.00] 选取bookstore下的price<32.00的book节点
/bookstore/book[price>30.00]/title 选取bookstore下的book的price>30.00的title节点
4选取未知节点
* 匹配任何元素节点
@* 匹配任何属性节点
node() 匹配任何类型的节点
5列子
/bookstore/* 选取bookstore元素的所以子元素
//* 选取文档中的所有元素
//title[@*] 选取所有带有属性的title元素
6、选取若干路径
//book/title|//book/price 选取 book 元素的所有 title 和 price 元素。
//title|//price
/bookstore/book/title|//price
7、XPath 轴
ancestor 选取当前节点的所以先辈节点
ancestor-or-self 选取当前节点的所有先辈节点及该节点
attribute 选取当前节点的所以属性
child 选取当前节点的所有子元素
descendant 选取当前节点的所以后代元素
descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following 选取文档中当前节点的结束标签之后的所有节点。
preceding 选取文档中当前节点的开始标签之前的所有节点。
self 选取当前节点
8 、步的语法:
轴名称::节点测试[谓语]
9、例子
child::book 选取所有属于当前节点的子元素的book节点
attibute::lang 选取当前节点的lang属性
child::* 选取当前节点的所有子节点
attibute::* 选取当前节点的所以属性
child::text() 选取当前节点所有文本子节点
child::node() 选取当前节点的所有子几点
descendant::book 选取当前节点的所有book先辈
ancestor::book 选取当前节点的所有book父节点
ancestor-or-self::book
child::*/child::price 选取当前节点的所有孙price节点
10、xpath运算符
预算符 描述 实例 返回值
| 计算两个节点集 //book|//cd 返回所有拥有 book 和 cd 元素的节点集
+ 加法 5+4 9
- 减法 2-1 1
* 乘法 2*4 8
div 除法 8div4 2
= 等于 price=9.80 如果 price 是 9.80,则返回 true。如果 price 是 9.90
!=
<
<=
>
>=
or 或 price=9.80 or price=9.50 如果 price 是 9.80,则返回 true。如果 price 是 9.60,则返回 false。
and 与 price>9.00 and price<9.90
mod 计算除法的余数 5 mod 2
三、小结一下
xpath最大的好处就是可以很容易的从xml文档中提取出所需要的信息,不需要使用for循环从头遍历,要使用xpath语句,必须先创建httpRequest对象,就像ajax一样,缺点就是在不同的浏览器中,有写语法得不到想要的结果,具体的实例见附近。