2009-08-10 13 views
1

今天我偶然發現了一個非常有趣的案例(至少對我而言)。我瞎搞與硒和XPath,並試圖得到一些元素,但有一個奇怪的現象:xPath奇怪的行爲 - 選擇所有元素,即使[1]設置爲

<div class="resultcontainer"> 
    <div class="info"> 
    <div class="title"> 
     <a> 
      some text 
     </a> 
    </div> 
    </div> 
</div> 

<div class="resultcontainer"> 
    <div class="info"> 
    <div class="title"> 
     <a> 
      some other text 
     </a> 
    </div> 
    </div> 
</div> 

<div class="resultcontainer"> 
    <div class="info"> 
    <div class="title"> 
     <a> 
      some even unrelated text 
     </a> 
    </div> 
    </div> 
</div> 

這是我的數據。 當我運行下面的XPath查詢:

//div[@class="title"][1]/a 

我得到的結果ALL,而不是隻有第一個。但如果我查詢:

//div[@class="resultcontainer"][1]/div[@class="info"]/div[@class="title"]/a 

我只得到第一,而不是全部。

背後有一些神聖的理由嗎?

最好的問候, bisko

回答

2

我想你想

(//div[@class="title"])[1]/a 

此:

//div[@class="title"][1]/a 

選擇具有一個@class的所有(<a>元素是兒童)<div>元素'title',這是他們父母的第一個孩子(在這個領域T)。這意味着:它選擇全部其中。

正在工作的XPath選擇所有<div>元素的@class'title' - 以及那些需要第一個元素的元素。

謂詞(在方括號[]表達式)施加到匹配前面的位置步驟中的各元件(即"//div"單獨。要將謂詞應用於過濾後的一組節點,您需要使用圓括號清除分組。

因此,該:

//div[1][@class="title"]/a 

將選擇所有<div>元素,取第一個,然後通過檢查@class值過濾下來futher。也不是你想要的。 ;-)

+0

嗯,永遠不會跨過我的腦海,謝謝! – bisko 2009-08-10 15:26:34