2011-11-30 19 views
1

我想返回我的XPath查詢和網頁的第一個元素,但不確定爲什麼這不適用於Google Chrome。我嘗試了各種變化,但這一直不成功。如何從XPath中的按鈕元素中選擇第一個ID?

基本的例子是在我的情況下返回:

INPUT: //button[@data-qtip='Next Page']/@id 
OUTPUT: [id=​"button-1135-btnEl",id=​"button-1101-btnEl"] 

所以我的猜測是,選擇第一項可以根據以下步驟,但對我沒有工作要做。

INPUT: //button[@data-qtip='Next Page' and position() = 1]/@id 
OUTPUT: [id=​"button-1135-btnEl",id=​"button-1101-btnEl"] 
INPUT: //button[@data-qtip='Next Page']/@id[1] 
OUTPUT: [id=​"button-1135-btnEl",id=​"button-1101-btnEl"] 

回答

5
//button[@data-qtip='Next Page']/@id[1] 

這是XPath的的最常見問題之一。

上述表達式通常不會按預期方式選擇(僅)一個節點。

原因?操作者具有比所述的XPath []操作者一個低優先級 -

W3C XPath Specification//縮寫以這樣的方式,這個僞定義。

因此,像任何表達:

//SomeNode[1] 

選擇所有SomeNode節點的每一個是所述第一子SomeNode其父的。在一般情況下,可能有多個這樣的節點。

當我們要選擇的文件在第一SomeNode節點,那麼我們必須用括號覆蓋默認的運算符優先級:

(//SomeNode)[1] 

在這種特殊情況下使用

(//button[@data-qtip='Next Page']/@id)[1] 
+0

+1的解釋。 – Birei

+0

@Birei:不客氣。 –

+0

對我來說,你的文本似乎暗示在這種情況下,''//與任何其他軸都不相似。也許我誤解了它,但如果沒有,那麼它是如何呢?畢竟,也可能出現類似的問題,例如,使用'child :: aa/child :: bb [1]'。是不是更多地關於(待過濾的)節點集合中的每個節點的上下文位置總是獨立計算的,並且分組表達式只是改變了上下文並且因此確定了上下文位置的方式? – jasso

1

嘗試,如果你未來的XPath命令作品:

INPUT: (//button[@data-qtip='Next Page']/@id)[1] 
相關問題