为了账号安全,请及时绑定邮箱和手机立即绑定

XPath:选择具有特定属性的第一个元素

XPath:选择具有特定属性的第一个元素

XPath bookstore/book[1]选择下的第一本书节点bookstore。如何选择匹配更复杂条件的第一个节点,例如匹配第一个节点 /bookstore/book[@location='US']
查看完整描述

3 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

使用 (/bookstore/book[@location='US'])[1]


这将首先获得具有location属性等于'US'的书籍元素。然后它将从该集合中选择第一个节点。请注意括号的使用,这是某些实现所必需的。


(请注意,这与/bookstore/book[1][@location='US']除非第一个元素碰巧具有该location属性是不同的)


查看完整回答
反对 回复 2019-12-09
?
智慧大石

TA贡献1946条经验 获得超3个赞

/bookstore/book[@location='US'][1] 仅适用于简单的结构。


添加更多的结构,事情就会中断。



<bookstore>

 <category>

  <book location="US">A1</book>

  <book location="FIN">A2</book>

 </category>

 <category>

  <book location="FIN">B1</book>

  <book location="US">B2</book>

 </category>

</bookstore> 

/bookstore/category/book[@location='US'][1] 产量


<book location="US">A1</book>

<book location="US">B2</book>

不是“第一个匹配更复杂条件的节点”。/bookstore/category/book[@location='US'][2]什么也不返回。


使用括号可以得到原始问题的结果:


(/bookstore/category/book[@location='US'])[1] 给


<book location="US">A1</book>

并按(/bookstore/category/book[@location='US'])[2]预期工作。


查看完整回答
反对 回复 2019-12-09
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

作为对乔纳森·芬兰德答案的解释:

  • 同一谓词([position()=1 and @location='US'])中的多个条件必须整体上为真

  • 连续谓词([position()=1][@location='US'])中的多个条件必须一个接一个地成立

  • 这意味着[position()=1][@location='US']!= [@location='US'][position()=1]
    [position()=1 and @location='US']==[@location='US' and position()=1]

  • 提示:一个人[position()=1]可以缩写为[1]

你可以建立在谓词复杂的表达式与布尔运算符“ and”和“ or”,并与布尔XPath函数not()true()false()。另外,您可以将子表达式括在括号中。


查看完整回答
反对 回复 2019-12-09
  • 3 回答
  • 0 关注
  • 5135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信