XPath集合——XPath语法详解系列(三)

  • 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> 元素: 

x/y[2]

每个 <x> 中的第二个 <y> ,可选择多个。

(x/y)[2]

<x> <y> 组成的整个集合元素集的第三个 <y> ,有且仅有一个。

x[2]/y[2]

第二个 <x> 中的第二个 <y> ,也有且仅有一个。

<x>

  <y/>

  <y/>

</x>

<x>

  <y/>

  <y/>

</x>

<x>

  <y/>

  <y/>

</x>

<x>

  <y/>

  <y/>

</x>

<x>

  <y/>

  <y/>

</x>

<x>

  <y/>

  <y/>

</x>

 

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

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

x/y[1]

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

x/child::y[1]

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

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

x/y/ancestor::x[1]

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

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

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 | magazine)/price是可以的,因为分组括号用在了第一级步长。

示例:

表达式 引用

(book/author)

属于当前上下文节点中任何 <book> 元素的子元素的所有 <author> 元素。

author[(degree or award) and publication]

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值