XPath的语法
XPath使用路径表达式来选取XML文档中的节点或者节点集,节点是通过沿着路径path或者步steps来选取的
匹配表达式:
Xpath可以使用类似正则表达式来匹配HTML文件当中的内容,常见的匹配表达式如下
nodename
选取nodename节点的所有的子节点
/
从当前的节点当中选取直接子节点
//
从当前的节点选取子孙节点
.
选取当前的节点
..
选取当前的节点的父节点
@
选取属性
父节点表示的是当前节点的上一层节点
子节点表示当前节点的下一层节点,子孙节点表示当前节点的所有下层节点
谓词
查找某个特定的节点或者包含某个指定的值的节点可以使用Xpath当中的谓语,通常被嵌在路径后面的方括号当中
/html/body/div[1]
选取属于body子节点下的第一个div节点
/html/body/div[last()]
选取属于body子节点下的最后一个div节点
/html/body/div[last()-1]
选取属于body子节点下的倒数第二个div节点
/html/body/div[position()<3]
选取属于body子节点下的前两个div节点
/html/body/div[@id]
选取属于body子节点下的带有id属性的div节点
/html/body/div[@id="content"]
选取属于body子节点下的id属性为content的div的节点
/html/body/div[xx>10.00]
选取属于body子节点下的xx元素值大于10的节点
选取未知的节点
Xpath通配符可以用来选取未知的XML元素
*
匹配任何的元素节点
@*
匹配任何的属性节点
node()
匹配任何类型的节点
选取若干路径
|选取若干个路径
//book/title|//book/price
选取book元素的所有的title和price元素
//title||//price
选取文档当中的所有的title和priece元素
/bookstore/book/title|//price
选取属于bookstore元素的book元素的所有的title元素,以及文档当中的所有的price元素
Xpath的轴Axes
轴可以定义相对于当前的节点的节点集
ancestor
选取当前的节点的所有先辈(父,祖父)
ancestor-or-self
选取当前的节点的所有的先辈以及当前的节点的本身
attribute
选取当前的节点的所有的属性
child
选取当前的节点的所有的子元素
descendant
选取当前的节点的所有的后代的元素(子,孙等)
descendant-or-self:
选取当前的所有的后代元素,以及当前节点的本身
following
选取文档当中当前节点的结束标签之后的所有的节点
following-sibling
选取当前节点之后的所有的兄弟节点
namespace
选取当前的节点的所有命名空间的节点
parent
选取当前的节点的父节点
preceding:
选取文档当前节点的开始便签之前的所有的节点
preceding-sibling:
选取当前节点之前的所有的同级节点
Self
选取当前的节点
Xpath运算符
|
计算两个节点集
+
加法
-
减法
*
乘法
div
触发
=
等于
!=
不等于
<
小于
功能函数
当对象仅仅掌握其部分的特征,需要模糊搜索该类的对象的时候可以使用Xpath当中的提供的功能进行模糊搜索
start-withs
//div[start-with(@id,"co")]
选取id值为co开头的div节点
contains
//div[contains(@id,"co")]
选取id值包含co的div的节点
and
//div[contains(@id,"co") and contains(@id,"en")]
选取id值包含co和en的div节点
text()
//li[contains(text(),"first")]
选取节点文本包含first的div节点
加载 XML 文档
所有的现代浏览器都支持使用XMLHttpRequest来加载XML文档的方法
针对大多数浏览器的代码var xmlhtto=new XMLHttpRequest()
选取节点
IE使用selectNodes方法xmlDoc.selectNodes(xpath);
Firefox,Chrom,Opera以及Safari使用evaluate()方法
xmlDoc.evaluate(xpath,xmlDoc,null,XPathResult.ANY_TYPE,null);
选取所有的title:/boolstore/book/title
选取第一个book的title:/bookstore/book[1]/title
选取所有的价格:
/bookstore/book/priece/text()
选取价格高于35的price节点:
/bookstore/book[price>35]/price