下面是一个XML例子,我们将用它来说明XPath语法:
一、选择结点
表达式 说明
结点名 选择当前结点的所有子结点
/ 从根结点开始
// 从当前结点开始选择符合条件的结点
. 选择当前的结点
.. 选择当前结点的双亲
@ 选择属性
举例说明如下:
表达式 说明
bookstore 选择bookstore元素的所有子结点
/bookstore 选择根元素bookstore
bookstore/book 选择bookstore下的所有book子元素
//book 选择文档中的所有book元素
bookstore//book 选择bookstore下的所有book子孙元素
//@lang 选择所有名为lang的属性
二、谓词
谓词用于寻找特定的结点或一个包含特定值的结点。谓词包括在方括号中。
举例说明如下:
表达式 说明
/bookstore/book[1] 选择bookstore元素下的第一个book子元素
/bookstore/book[last()] 选择bookstore元素下的最后一个book子元素
/bookstore/book[last()-1] 选择bookstore元素下的最后一个book子元素,book子元素应是 bookstore下唯一的一个
/bookstore/book[position()<3] 选择bookstore元素下开始的两个book子元素
//title[@lang] 选择所有的包含属性名为lang的title元素
//title[@lang='eng'] 选择所有的包含属性名为lang且属性值为eng的title元素
/bookstore/book[price>35.00] 选择bookstore元素下的所有包含值大于35.00的price元素的book子 元素
/bookstore/book[price>35.00]/title 选择bookstore元素下的所有包含值大于35.00的price元素 的book子元素下的title子元素
三、选择未知的结点
表达式 说明
* 匹配任何的元素结点
@* 匹配任何的属性结点
node() 匹配任何类型的结点
举例说明如下:
表达式 说明
/bookstore/* 选择bookstore元素下的所有子结点
//* 选择文档中的所有元素
//title[@*] 选择所有的title元素不管其属性如何
四、多路径选择
通过有表达式中使用|操作符,你可以进行多路径选择。
示例如下:
表达式 说明
//book/title | //book/price 选择所有book元素下的title和price子元素
//title | //price 选择文档中的所有的title和price元素
/bookstore/book/title | //price 选择/bookstore/book/下的title子元素和文档中的所有price元素
五、XPath轴心
一个轴心定义了相对于当前结点的结点集,例表如下:
轴心名 说明
ancestor 选择当前结点的所有祖先
ancestor-or-self 选择当前结点及其所有祖先
attribute 选择当前结点的所有属性
child 选择当前结点的所有子女
descendant 选择当前结点的所有子孙
示例说明:
表达式 说明
child::book 选择当前结点的所有book子结点
attribute::lang 选择当前结点的lang属性
child::* 选择当前结点的所有子女
attribute::* 选择当前结点的所有属性
child::text() 选择当前结点的所有文本子结点
child::node() 选择当前结点的所有子结点
descendant::book 选择当前结点的所有子孙book
ancestor::book 选择当前结点的所有祖先book
ancestor-or-self::book 选择当前结点的所有祖先book,如果当前结点也是book,那么包含当前结点
child::*/child::price 选择当前结点的所有孙子结点price
descendant-or-self 选择当前结点及其所有子孙
following 选择当前结点结束标记后的东西
following-sibling 选择当前结点后的所有同科
namespace 选择当前结点的所有名字空间结点
parent 选择当前结点的双亲
preceding 选择当前结点开始标记前的东西
preceding-sibling 选择当前结点前的所有同科
self 选择当前结点