2013-09-23 85 views
6

我解析一個網頁,其中包括這樣的結構:XPath的:找到不同的行中同一位置的表格單元格

<tr> 
    <td>Label 1</td> 
    <td>Label 2</td> 
    <td>Label 3</td> 
    <td>Something else</td> 
<\tr> 
<tr> 
    <td>Item 1</td> 
    <td>Item 2</td> 
    <td>Item 3</td> 
<\tr> 

我需要做的是選擇基於它的標籤上的項目,所以我的想法如果標籤位於行中的第3個標籤中,我可以抓住下一行中的第3個標籤來查找該項目。我不知道如何使用position()函數,也許xpath(1.0)無法處理這種類型的過濾。

到目前爲止,我的最佳嘗試是://td[ancestor::tr[1]/preceding-sibling::tr[1]/td[position()]]。我希望position()函數可以在xpath的開頭抓取<td>的位置,因爲xpath的其餘部分是該節點的過濾器。

我試圖做甚至可能嗎?

+2

您使用哪種庫/編程語言來執行XPath?我不認爲這可以在純XPath 1.0中完成,您需要將來自外部上下文的'position()'存儲在一個變量中,然後在謂詞中使用該變量,以及如何設置變量的方式因工具而異工具。 –

+0

我使用硒webdriver。 – eldon111

+0

您正在使用哪種selenium-webdriver語言綁定?使用各種硒方法而不是純xpath解決方案可能更容易。 –

回答

5

你是在正確的軌道上 - 是的,你可以使用position()以及count()

要選擇文本Item 2給出Label 2

//td[. = 'Label 2']/../following-sibling::tr/td[position() = count(//td[. = 'Label 2']/preceding-sibling::td)+1]/text() 

說明:選取Ñ由具有所需的單元之前已存在同級細胞的數目給出的第n細胞標籤在前一行中。實際上,使用count()函數來確定標籤行中的位置,然後通過匹配其position()來選擇下一行中的相應單元格。

+0

問題是,我需要從相鄰的''標籤中抓取相應的項目。像'Label 2'一樣,返回'Item 2'。 – eldon111

+0

啊,這有點難,但也可行。查看上面更新的答案。 – kjhughes

相關問題