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