XPath:选择具有特定属性的第一个元素
XPath bookstore/book[1]选择bookstore下的第一本书籍节点。
我如何选择匹配更复杂条件的第一个节点,例如与/bookstore/book[@location='US']匹配的第一个节点/bookstore/book[@location='US']
使用(/bookstore/book[@location='US'])[1]
这将首先获取位置属性等于'US'的图书元素。 然后它将从该组中选择第一个节点。 请注意使用括号,这是一些实现所需的。
(注意这不同于/bookstore/book[1][@location='US']除非第一个元素也恰好具有该位置属性)
/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] yield
<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'] != [@location='US'][position()=1] while
[position()=1 and @location='US'] == [@location='US' and position()=1] [position()=1]可以缩写为[1] 您可以使用布尔运算符“ and ”和“ or ”以及布尔型XPath函数not() , true()和false()在谓词中构建复杂表达式。 另外你可以用子括号包装子表达式。
