一、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)
更深入地提炼所选的节点集