我遇到了一个无法按元素文本获取HTML元素的问题。我的HTML看起来像:
...
<table>
...
<tr>
...
<td class="oMain">test value</td>
...
<tr>
...
</table>
...
出于某些特殊原因,我必须得到'&lt; td class =“oMain”&gt;'元素使用它的文本'测试值'。我试过'// tr [td ='test value'] / td'但没有结果。我怎么能写XPath表达式?
欢迎任何帮助。谢谢!
答案 0 :(得分:1)
你的表达
//tr[td='test value']/td
将谓词放在父节点“tr”上。也许这就是导致问题的原因。
你想要的是这个
//td[@class = "oMain" and child::text() = 'test value']]
以下是xPath语言的W3规范的链接,供进一步阅读:http://www.w3.org/TR/xpath/
答案 1 :(得分:1)
您的XPath表达式似乎是正确的。您的html中是否有默认命名空间(例如XHTML)?如果是这样,您可以像这样修改XPath:
//*[local-name()='td' and text()='test value']
如果您可以弄清楚如何使用命名空间,您也可以
//xhtml:tr[xhtml:td='test value']/xhtml:td
这有帮助吗?
答案 2 :(得分: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>
答案 3 :(得分:0)
在xpath表达式中,首先放置元素节点,在你的情况下是td,然后应用过滤器text()='text node'
// td [text()='test value']
希望这有帮助。