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

XPath bookstore/book[1]选择下的第一本书节点bookstore

如何选择匹配更复杂条件的第一个节点,例如匹配第一个节点 /bookstore/book[@location='US']


素胚勾勒不出你
浏览 5152回答 3
3回答

catspeake

使用 (/bookstore/book[@location='US'])[1]这将首先获得具有location属性等于'US'的书籍元素。然后它将从该集合中选择第一个节点。请注意括号的使用,这是某些实现所必需的。(请注意,这与/bookstore/book[1][@location='US']除非第一个元素碰巧具有该location属性是不同的)

智慧大石

/bookstore/book[@location='US'][1] 仅适用于简单的结构。添加更多的结构,事情就会中断。用<bookstore>&nbsp;<category>&nbsp; <book location="US">A1</book>&nbsp; <book location="FIN">A2</book>&nbsp;</category>&nbsp;<category>&nbsp; <book location="FIN">B1</book>&nbsp; <book location="US">B2</book>&nbsp;</category></bookstore>&nbsp;/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]预期工作。

翻过高山走不出你

作为对乔纳森·芬兰德答案的解释:同一谓词([position()=1 and @location='US'])中的多个条件必须整体上为真连续谓词([position()=1][@location='US'])中的多个条件必须一个接一个地成立这意味着[position()=1][@location='US']!=&nbsp;[@location='US'][position()=1]而[position()=1 and @location='US']==[@location='US' and position()=1]提示:一个人[position()=1]可以缩写为[1]你可以建立在谓词复杂的表达式与布尔运算符“&nbsp;and”和“&nbsp;or”,并与布尔XPath函数not(),true()和false()。另外,您可以将子表达式括在括号中。
打开App,查看更多内容
随时随地看视频慕课网APP