如何使用XPath通过文本获取HTML元素?
问题描述:
我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!
答
你用什么来解析?在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>
答
而是写作的XPath可以alow使用jQuery对所获得的价值像下面
$(".oMain").html();
如果您有多个td,那么您可以使用
$(".txt").each(function() { //Your JS code here to fetch the value using this.html() });
答
个
你表达
//tr[td='test value']/td
地方父节点 “TR” 的断言。也许这就是导致问题的原因。
你想大概这是什么
//td[@class = "oMain" and child::text() = 'test value']]
这里有一个以钍为进一步阅读XPath语言的W3规格链接:http://www.w3.org/TR/xpath/
答
你的XPath表达式似乎是正确的。你的html中是否有默认的命名空间(例如XHTML)?如果是这样,你可以修改你的XPath这样的:
//*[local-name()='td' and text()='test value']
如果你能弄清楚如何使用命名空间,你也可以做
//xhtml:tr[xhtml:td='test value']/xhtml:td
有何帮助?
答
在XPath表达式中,首先把元素节点,而你的情况是TD,然后应用滤波器文本()=“文本节点”
// TD [文本()='测试值']
希望这会有所帮助。
我正在使用htmlcleaner在java中解析,我只需要xpath表达式而不是编程。顺便说一句,'//td.oMain'符合Xpath规范吗? – newton 2010-07-22 05:42:26
我不这么认为。 – FK82 2010-07-22 08:22:45