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的/和//区别:
/是仅仅查找它直接父节点或者子节点
//是查找它所有的父级和祖父级...节点
详情请查阅: