XPath 集合

XPath 查询返回的集合在定义的范围内保留文档顺序、层次结构和标识。也就是说,按照文档顺序返回元素集合,没有重复的元素。因为根据定义,属性不排序,所以,为特定元素返回的属性不进行明确地排序。

具有特定标记名的所有元素的集合使用标记名本身表示。限定方法可以通过使用句点和正斜杠 (./) 表明元素是从当前上下文中选择,但是默认情况下将使用当前上下文,不必明确说明。

示例

表达式

引用

./first-name

所有的 <first-name> 元素。注意,此表达式等效于后面的表达式。

first-name

所有的 <first-name> 元素。

为集合编制索引

使用 XPath 表达式可以很容易在节点集中查询特定的节点。只需为索引序号加上方括号。序号从 1 开始(第一个元素是编号 1)。

方括号字符 ([]) 的优先级高于斜杠字符(/ 和 //)。有关更多信息,请参见运算符和特殊字符

示例

表达式

引用

author[1]

第一个 <author> 元素。

author[first-name][3]

第三个具有 <first-name> 子元素的 <author> 元素。

注意,索引相对于筛选的节点集。例如,请考虑以下数据。

<x>
  <y/>
  <y/>
</x>
<x>
  <y/>
  <y/>
</x>

下表演示如何选择特定的 <x> 和 <y> 元素。

表达式

引用

x/y[1]

每个 <x> 内的第一个 <y>。

(x/y)[1]

<x> 元素内 <y> 元素的整个集中的第一个 <y>。

x[1]/y[1]

第一个 <x> 内的第一个 <y>。

上面的示例简单地引用使用暗示默认值(例如 child:: 轴)的 XPath 集合。对于此轴,子节点集合按照前向文档顺序编制索引。

对于其他轴(例如 ancestor::),在 XPath 表达式中明确使用轴名。对于此轴,上级集合按照后向文档顺序编制索引。从上表中考虑此示例:

x/y[1]

此表达式等效于以下表达式:

x/child::y[1]

两个表达式都意味着“对于每个 <x> 元素,选择名为 <y>. 的第一个子元素”。

下面的示例使用了相同的语法。

x/ancestor::y[1]

此示例意味着“对于每个 <x> 元素,选择第一个名为 <y> 的上级元素(按相反的文档顺序)”。语法相同但是顺序相反。

查找集合中的最后一个元素

last() 函数对集合中的最后一个元素返回 True。注意,last 相对于父节点。

示例

表达式

引用

book[last()]

最后一个 <book> 元素。

book/author[last()]

每个 <book> 元素内的最后一个 <author> 元素。

(book/author)[last()]

<book> 元素内 <author> 元素的整个集中的最后一个 <author> 元素。

分组

为了清楚起见,或正常的优先级不足以表达某个运算,可以使用括号为集合运算符分组。分组运算符可以在任何筛选表达式(谓词)中使用,例如 author[(degree or award)and publication]。也可以在顶级步长表达式中使用,例如 (book|magazine) 或 (author/degree | book/award)。不能应用于低级步长表达式。例如,author/(degree | award)无效。

示例

表达式

引用

(book/author)

所有是来自当前上下文节点的任何 <book> 元素的子元素的 <author> 元素。

author[(degree or award) and publication]

所有包含至少一个 <degree> 或 <award> 元素和至少一个 <publication> 元素的 <author> 元素。

请参阅

参考

XPath 示例

概念

XPath 语法的示例 XML 文件 (inventory.xml)