XPath 轴
XML 示例文档
我们将在下面的示例中使用以下 XML 文档。
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="en">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
XPath 轴
轴表示与上下文(当前)节点的关系,用于定位树上相对于该节点的节点。
轴名称 | 结果 |
---|---|
ancestor | 选择当前节点的所有祖先(父节点、祖父节点等) |
ancestor-or-self | 选择当前节点的所有祖先(父节点、祖父节点等)以及当前节点本身 |
attribute | 选择当前节点的所有属性 |
child | 选择当前节点的所有子节点 |
descendant | 选择当前节点的所有后代(子节点、孙节点等) |
descendant-or-self | 选择当前节点的所有后代(子节点、孙节点等)以及当前节点本身 |
following | 选择文档中当前节点结束标签之后的全部内容 |
following-sibling | 选择当前节点之后的全部兄弟节点 |
namespace | 选择当前节点的所有命名空间节点 |
parent | 选择当前节点的父节点 |
preceding | 选择文档中出现在当前节点之前的所有节点,但不包括祖先节点、属性节点和命名空间节点 |
preceding-sibling | 选择当前节点之前的全部兄弟节点 |
self | 选择当前节点 |
位置路径表达式
位置路径可以是绝对的或相对的。
绝对位置路径以斜杠 ( / ) 开头,相对位置路径则没有。在这两种情况下,位置路径都由一个或多个步骤组成,每个步骤之间用斜杠隔开
绝对位置路径
/step/step/...
相对位置路径
step/step/...
每个步骤都针对当前节点集中节点进行评估。
一个步骤由以下部分组成
- 一个轴(定义所选节点与当前节点之间的树关系)
- 一个节点测试(在轴内标识节点)
- 零个或多个谓词(进一步细化所选节点集)
位置步骤的语法为
axisname::nodetest[predicate]
示例
示例 | 结果 |
---|---|
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 孙节点 |