XPath bookstore/book[1]选择书店下的第一个图书节点。

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


当前回答

Use:

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

这将首先获得位置属性为'US'的book元素。然后它将从该集合中选择第一个节点。注意括号的使用,这是一些实现所需要的。

注意,这与/bookstore/book[1][@location='US']不同,除非第一个元素碰巧也有location属性。

其他回答

Use:

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

这将首先获得位置属性为'US'的book元素。然后它将从该集合中选择第一个节点。注意括号的使用,这是一些实现所需要的。

注意,这与/bookstore/book[1][@location='US']不同,除非第一个元素碰巧也有location属性。

前女友。

<input b="demo">

And

(input[@b='demo'])[1]

如果xpath很复杂,或者有多个节点使用相同的xpath,则使用索引获取所需的节点。

例:

(//bookstore[@location = 'US'])[index]

你可以给出你想要的节点的编号。

作为对乔纳森·芬格兰的回答的解释:

同一个谓词([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()在谓词中构建复杂的表达式。另外,你还可以把子表达式用圆括号括起来。

如果在给定的xml上提供了namespace,最好使用这个。

(/*[local-name() ='bookstore']/*[local-name()='book'][@location='US'])[1]