2010-07-22 132 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 [文本()='测试值']

希望这会有所帮助。

相关问题