2010-07-22 130 views
1

我encoutered一個問題,就是不能用元素的text.My HTML得到一個HTML元素看起來像:如何使用XPath通過文本獲取HTML元素?

... 
<table> 
    ... 
    <tr> 
    ... 
    <td class="oMain">test value</td> 
    ... 
    <tr> 
    ... 
</table> 
... 

對於一些特殊的原因,我必須讓'< TD類=‘oMain’ >'元素使用它的文本'測試值'。我試過'// tr [td ='test value']/td'但沒有結果。我怎樣才能寫XPath表達式?

任何幫助是welcome.Thanks!

+0

我正在使用htmlcleaner在java中解析,我只需要xpath表達式而不是編程。順便說一句,'//td.oMain'符合Xpath規範嗎? – newton 2010-07-22 05:42:26

+0

我不這麼認爲。 – FK82 2010-07-22 08:22:45

+0

沒有關閉 – 2010-12-21 09:58:27

回答

0

你用什麼來解析?在Ruby +角度來說,Hpricot,你可以做

doc.search("//td.oMain").each do |cell| 
    if cell.inner_html == "test value" 
    return cell 
    end 
end 

在這種情況下,細胞將是:

<td class="oMain">test value</td> 
-1

而是寫作的XPath可以alow使用jQuery對所獲得的價值像下面

 
$(".oMain").html(); 

如果您有多個td,那麼您可以使用

 
$(".txt").each(function() { 
//Your JS code here to fetch the value using this.html() 

}); 
1

你表達

//tr[td='test value']/td 

地方父節點 「TR」 的斷言。也許這就是導致問題的原因。

你想大概這是什麼

//td[@class = "oMain" and child::text() = 'test value']] 

這裏有一個以釷爲進一步閱讀XPath語言的W3規格鏈接:http://www.w3.org/TR/xpath/

1

你的XPath表達式似乎是正確的。你的html中是否有默認的命名空間(例如XHTML)?如果是這樣,你可以修改你的XPath這樣的:

//*[local-name()='td' and text()='test value'] 

如果你能弄清楚如何使用命名空間,你也可以做

//xhtml:tr[xhtml:td='test value']/xhtml:td 

有何幫助?

0

在XPath表達式中,首先把元素節點,而你的情況是TD,然後應用濾波器文本()=「文本節點」

// TD [文本()='測試值']

希望這會有所幫助。

相關問題