XPath 集合
XPath 查询返回的集合在定义的范围内保留文档顺序、层次结构和标识。 也就是说,按照文档顺序返回元素集合,没有重复的元素。 因为根据定义,属性不排序,所以,为特定元素返回的属性不进行明确地排序。
具有特定标记名的所有元素的集合使用标记名本身表示。 限定方法可以通过使用句点和正斜杠 (./
) 表明元素是从当前上下文中选择,但是默认情况下将使用当前上下文,不必明确说明。
示例
表达式 | 引用 |
---|---|
|
所有的 |
|
所有的 |
为集合编制索引
使用 XPath 表达式可以很容易在节点集中查询特定的节点。 只需为索引序号加上方括号。 序号从 1 开始(第一个元素是编号 1)。
方括号字符 ([]
) 的优先级高于斜杠字符(/
和 //
)。 有关更多信息,请参见运算符和特殊字符。
示例
表达式 | 引用 |
---|---|
|
第一个 |
|
第三个具有 |
注意,索引相对于筛选的节点集。 例如,请考虑以下数据。
<x>
<y/>
<y/>
</x>
<x>
<y/>
<y/>
</x>
下表演示如何选择特定的 <x>
和 <y>
元素。
表达式 | 引用 |
---|---|
|
每个 |
|
|
|
第一个 |
上面的示例简单地引用使用暗示默认值(例如 child::
轴)的 XPath 集合。 对于此轴,子节点集合按照前向文档顺序编制索引。
对于其他轴(例如 ancestor::
),在 XPath 表达式中明确使用轴名。 对于此轴,上级集合按照后向文档顺序编制索引。 从上表中考虑此示例:
x/y[1]
此表达式等效于以下表达式:
x/child::y[1]
两个表达式都意味着“对于每个 <x>
元素,选择名为 <y>
. 的第一个子元素”。
下面的示例使用了相同的语法。
x/ancestor::y[1]
此示例意味着“对于每个 <x>
元素,选择第一个名为 <y>
的上级元素(按相反的文档顺序)”。 语法相同但是顺序相反。
查找集合中的最后一个元素
last() 函数对集合中的最后一个元素返回 True。 注意,last
相对于父节点。
示例
表达式 | 引用 |
---|---|
|
最后一个 |
|
每个 |
|
|
分组
为了清楚起见,或正常的优先级不足以表达某个运算,可以使用括号为集合运算符分组。 分组运算符可以在任何筛选表达式(谓词)中使用,例如 author[(degree or award)and publication]
。 也可以在顶级步长表达式中使用,例如 (book|magazine)
或 (author/degree | book/award)
。 不能应用于低级步长表达式。 例如,author/(degree | award)
无效。
示例
表达式 | 引用 |
---|---|
|
所有是来自当前上下文节点的任何 |
|
所有包含至少一个 |