63

我使用了这个 Xpath 表达式"//span[@class='Big']",并获得了该页面中<span>标记和class='Big'.

我的问题是,如果我只想要页面上的第一次出现,而不是所有出现,那么正确的Xpath表达方式是什么?

谢谢,纳林

4

2 回答 2

149

正确答案(注意括号)

(//span[@class='Big'])[1]

在一般情况下,以下表达式是错误的:

//span[@class='Big'][1]

因为它选择span文档中的每个元素,满足第一个谓词中的条件,并且是它的父元素的第一个这样的子元素——在一个 XML 文档中可以有很多这样的元素,并且它们都会被选中。

更详细的解释见:https ://stackoverflow.com/a/5818966/36305

于 2013-01-12T16:05:36.487 回答
7

如果您期望class属性等于 Big(没有任何其他类附加到元素),Dimitre Novatchev 的答案是正确的:

(//span[@class="Big"])[1]

...类似于以下 JavaScript 表达式:

document.querySelectorAll('span[class="Big"]')[0]

另一方面,如果您希望Big成为属性中任意数量的类之一class(而不是唯一的类),则可以使用以下表达式:

(//span[contains(concat(" ", normalize-space(@class), " "), " Big ")])[1]

...类似于以下 JavaScript 表达式:

document.querySelectorAll('span.Big')[0]
于 2018-04-13T17:45:41.990 回答