解析元素的前一个元素<td>(忽略其间的其他元素)



我有一个非常长的HTML文件,里面有很多不同的表。我只想解析某些表,但不幸的是,<table>标记在这里没有帮助。

我想要解析的表如下所示:

<tr>
<td> TEXT1 </td>
<td> <a class='unique identifier' ...> TEXT2 </a></td>
</tr>

我想要"TEXT1"one_answers"TEXT2"。我知道如何获得"TEXT2":它总是在<a>标签中,到目前为止我的解决方案是

//a[(@class="unique identifier")]

注意:有时"TEXT1"在<p>标记中,有时则不然。有时它后面还有其他标签,如<b> s、<br> s或<em>等。我认为我需要在找到的每个<a>之后获得以前的<td>内容,但忽略中间的任何其他元素。

我如何告诉Nokogiri,对于我找到的每一个"TEXT2",都可以返回并获得以前的<td>,这样我就可以获得"TEXT1"?

我会做一些类似的事情:

require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<tr>
<td> TEXT1 </td>
<td> <a class='uid'> TEXT2 </a></td>
</tr>
EOT
wrapping_tr = doc.at('//a[@class="uid"]/../..')
nodes = wrapping_tr.search('td')
nodes.map(&:text) 
# => [" TEXT1 ", "  TEXT2 "]

我建议花点时间阅读XPath文档,因为这是非常初级的。

相关内容

  • 没有找到相关文章

最新更新