https://www.cnblogs.com/fgzhang/p/6645575.html
XPath 路径表达式
XPath 使用路径表达式来选取 Html 中的节点或者节点集。
表达式描述
nodename选取此节点的所有子节点。
/从根节点选取。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。
HTML 实例
我们将在下面的例子中使用这个 HTML
<html>
<bookstore>
<book id="book1">
<title lang="eng">学习xpath</title>
<price id="test1">29.99</price>
</book>
<book id="book2">
<title lang="eng">学习xpath</title>
<price id="test2">39.95</price>
</book>
</bookstore>
</html>
实例
在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:
路径表达式结果
//bookstore选取 bookstore 元素的所有子节点。
//bookstore/book选取属于 bookstore 的子元素的所有 book 元素。
//book选取所有 book 子元素,而不管它们在文档中的位置。
//bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//book[@lang]选取包含 lang 的有属性所有book元素,而不管它们在文档中的位置。
常用的XPath 轴
轴可定义相对于当前节点的节点集。
轴名称结果
ancestor选取当前节点的所有先辈(父、祖父等)。
parent选取当前节点的父节点。
following-sibling选取当前节点之后的所有同级节点。
preceding-sibling选取当前节点之前的所有同级节点。
假如我们需要定位:
第一个book节点的title,因为此处的2个title标签的所有属性都一样,所以我们需要借助它邻近的元素定位到它。
//price[@id='test1']/preceding-sibling::title
xpath解读:首先找到id是test1的price节点,然后找到它之前的同级title节点。
//book[@id='book1']/title
xpath解读:首先找到id是book1的book节点,然后找到它直接子节点title。
其它轴实例:
//price/parent::book
xpath解读:定位price的直接父级节点book
//title/following-sibling:
rice
xpath解读:定位title后面同级节点price
//title//ancestor::book
xpath解读:定位title的所有父级、祖父级的book节点
xpath的/和//区别:
/是仅仅查找它直接父节点或者子节点
//是查找它所有的父级和祖父级...节点
详情请查阅: