目录

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 轴

轴表示与上下文(当前)节点的关系,并用于在树上定位相对于该节点的节点。

AxisName Result
ancestor Selects all ancestors (parent, grandparent, etc.) of the current node
ancestor-or-self Selects all ancestors (parent, grandparent, etc.) of the current node and the current node itself
attribute Selects all attributes of the current node
child Selects all children of the current node
descendant Selects all descendants (children, grandchildren, etc.) of the current node
descendant-or-self Selects all descendants (children, grandchildren, etc.) of the current node and the current node itself
following Selects everything in the document after the closing tag of the current node
following-sibling Selects all siblings after the current node
namespace Selects all namespace nodes of the current node
parent Selects the parent of the current node
preceding Selects all nodes that appear before the current node in the document, except ancestors, attribute nodes and namespace nodes
preceding-sibling Selects all siblings before the current node
self Selects the current node


位置路径表达式

位置路径可以是绝对路径或相对路径。

绝对位置路径以斜杠 ( / ) 开头,而相对位置路径则不然。在这两种情况下,位置路径都包含一个或多个步骤,每个步骤都用斜杠分隔:

An absolute location path:

/step/step/...

A relative location path:

step/step/...

每个步骤都会根据当前节点集中的节点进行评估。

一个步骤包括:

  • 轴(定义所选节点和当前节点之间的树关系)
  • 节点测试(识别轴内的节点)
  • 零个或多个谓词(以进一步细化选定的节点集)

定位步骤的语法是:

axisname::nodetest[predicate]

示例

Example Result
child::book Selects all book nodes that are children of the current node
attribute::lang Selects the lang attribute of the current node
child::* Selects all element children of the current node
attribute::* Selects all attributes of the current node
child::text() Selects all text node children of the current node
child::node() Selects all children of the current node
descendant::book Selects all book descendants of the current node
ancestor::book Selects all book ancestors of the current node
ancestor-or-self::book Selects all book ancestors of the current node - and the current as well if it is a book node
child::*/child::price Selects all price grandchildren of the current node