一、XPath是干什么的?
XPath是W3C的一个标准。它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计。
XPath是一种表达式语言,在XML中查找信息,它的返回值可能是节点,节点集合,原子值,以及节点和原子值的混合等。
二.XPath语法
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或成为根节点)。
XPath 使用路径表达式来选取XML 文档中的节点或节点集。节点是通过沿着路径(path) 或者步(steps) 来选取的。
(1)表达式
/ | 此路径运算符出现在模式开头时,表示应从根节点选择。 |
// | 从当前节点开始递归下降,此路径运算符出现在模式开头时,表示应从根节点递归下降。 |
. | 当前上下文。 |
.. | 当前上下文节点父级。 |
* | 通配符;选择所有元素节点与元素名无关。(不包括文本,注释,指令等节点,如果也要包含这些节点请用node()函数) |
@ | 属性名的前缀。 |
@* | 选择所有属性,与名称无关。 |
: | 命名空间分隔符;将命名空间前缀与元素名或属性名分隔。 |
|
|
(2)谓语
谓语用来查找某个特定的节点或者包含某个指定的值的节点。
谓语被嵌在方括号中。
路径表达式 | 结果 |
/bookstore/book[1] | 选取属于 bookstore 子元素的第一个book 元素。 |
/bookstore/book[last()] | 选取属于 bookstore 子元素的最后一个book 元素。 |
/bookstore/book[last()-1] | 选取属于 bookstore 子元素的倒数第二个book 元素。 |
/bookstore/book[position()<3] | 选取最前面的两个属于 bookstore 元素的子元素的book 元素。 |
//title[@lang] | 选取所有拥有名为 lang 的属性的title 元素。 |
//title[@lang='eng'] | 选取所有 title 元素,且这些元素拥有值为eng 的 lang 属性。 |
/bookstore/book[price>35.00] | 选取 bookstore 元素的所有book 元素,且其中的price 元素的值须大于35.00。 |
/bookstore/book[price>35.00]/title | 选取 bookstore 元素中的book 元素的所有title 元素,且其中的price 元素的值须大于35.00。 |
(3)XPath轴
轴可定义相对于当前节点的节点集。
轴名称 | 结果 |
ancestor | 选取当前节点的所有先辈(父、祖父等)。 |
ancestor-or-self | 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。 |
attribute | 选取当前节点的所有属性。 |
child | 选取当前节点的所有子元素。 |
descendant | 选取当前节点的所有后代元素(子、孙等)。 |
descendant-or-self | 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。 |
following | 选取文档中当前节点的结束标签之后的所有节点。 |
namespace | 选取当前节点的所有命名空间节点。 |
parent | 选取当前节点的父节点。 |
preceding | 选取文档中当前节点的开始标签之前的所有节点。 |
preceding-sibling | 选取当前节点之前的所有同级节点。 |
self | 选取当前节点。 |
(4)位置路径表达式
位置路径可以是绝对的,也可以是相对的。
绝对路径起始于正斜杠( / ),而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割:
绝对路径:
/step/step
相对路径
Step/step
每个步均根据当前节点集之中的节点来进行计算
步(step)包括:
(1)轴(axis)
定义所选节点与当前节点之间的树关系
(2)节点测试(node-test)
识别某个轴内部的节点
(3)零个或者更多谓语(predicate)
更深入地提炼所选的节点集