XPath在选取XML文档中有着非常方便的功能,下面介绍一些常用的表达式语法。

假设如下XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="en">测试</title>
<author sex="女">笑笑笑</author>
<year>2017</year>
<price>888</price>
</book>
<book>
<title lang="en">测试1</title>
<author sex="女" age="18">笑笑笑1</author>
<year>2018</year>
<price>889</price>
</book>
</bookstore>

基础表达式

选取节点基础表达式 摘自w3c

属性含义example
nodename选取此节点的所有子节点bookstore
*任何元素
@*任何属性的节点
任何属性的节点
/从根节点选取。/bookstore
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置//title
.选取当前节点。./title 选取当前节点下的title
..选取当前节点的父节点。
@选取属性//title[@lang=’en’]

一些定位的示例

获取所有的author节点
//author
获取第一个author节点 需要注意的是索引是从1开始的
//author[1]
获取拥有age属性的任何元素
//*[@age]
获取author节点的age属性=18的所有author节点
//author[@age='18']

稍微麻烦强大一点的定位XPath Axes

获取文本包含2018的所有父Book节点

//*[contains(text(),'2018')]/ancestor::book

还有一个ancestor-or-self选取的父节点包含自身

选取bookstore所有的子book节点

//bookstore/child::book

选取当前节点的所有 book 后代。

descendant::book

获取当前节点的父节点div

./parent::div

获取当前节点之后兄弟节点div

./following-sibling::div

获取当前节点之前兄弟节点div

./preceding-sibling::div

运算符

在前面其实已经使用到运算符 例如age=18

参考自 http://www.w3school.com.cn/xpath/xpath_operators.asp 不在此说明

函数

函数的使用方法在前面也使用到过 例如 contains(text(),'2018')
参考自 http://www.w3school.com.cn/xpath/xpath_functions.asp 不在此说明