2013-04-23 67 views
1

以下表爲例,我知道如何通過xapth的text()函數匹配<td>'Title_A'</td>,有沒有任何直接的方法來選擇<td> text_unknown </td>之後呢? :如何使用nokogiri在指定的元素之後選擇元素?

<table> 
    <tr><td rowspan=2> Title_A </td> <td> text_unknown </td></tr> 
            <tr><td> text_unknown </td></tr> 

    <tr><td rowspan=2> Title_B </td> <td> text_unknown </td></tr> 
            <tr><td> text_unknown </td></tr> 

    <tr><td rowspan=4> Title_C </td> <td> text_unknown </td></tr> 
            <tr><td> text_unknown </td></tr> 
            <tr><td> text_unknown </td></tr> 
            <tr><td> text_unknown </td></tr> 
</table> 
+0

嗨@MarkThomas,我用'的XPath('//表/ TR/TD [文本()= 「Title_A」] ''選擇標題'td' – Wen 2013-04-23 15:21:29

回答

2

比方說,你是匹配與以下XPath 'Title_A':

//td[text()='Title_A'] 

下一個單元格將

//td[text()='Title_A']/following-sibling::td[1] 

或者,如果你已經在標題單元格一個變量:

title_a = doc.xpath("//td[text()='Title_A']") 

然後你可以使用DOM方法next_sibling

next_cell = title_a.next_sibling 
+0

謝謝@MarkThomas,next_sibling方法可行,但我錯過了一些''的問題,選擇以下所有'​​'我使用'rowspan'循環並提取我需要什麼?是否可以使用xpath選擇特定數量的項目?再次感謝:) – Wen 2013-04-24 00:58:44

+0

因此,您希望標題之後的第二列,但每個子圖的第一列直到你到達下一個標題行爲止? – 2013-04-24 01:13:27

+0

是的!似乎不可能有一個xpath匹配器自動檢測這個邏輯,但是如果我能指定我想在匹配器中有多少項目,那將是非常好的。我希望利用像'each'這樣的方法,而不是現在使用的C時尚for-loop。 – Wen 2013-04-24 04:49:55

0

使用CSS HTML和XPath的XML。 +是CSS旁邊的兄弟選擇器。

doc.at('td[text()="Title_A"] + td') 

我看到周圍Title_A一些空間了,所以也許:

doc.at('td[text()*="Title_A"] + td') 
+0

嗨@pguardiario,css風格看起來很棒!是否可以一次選擇多個'td'?謝謝! – Wen 2013-04-24 00:59:51

+0

很難說出你的要求,也許你想要一般的兄弟選擇器'〜',如果你還沒有熟悉css,你可能需要一些時間來熟悉css。 – pguardiario 2013-04-24 06:14:40

+0

謝謝,我會這樣做:) – Wen 2013-04-24 08:59:58

相關問題