我有一个非常长的HTML文件,包含许多不同的表。我只想解析某些表格,但遗憾的是<table>
标记在这里没有任何帮助。
我想要解析的表格如下:
<tr>
<td> TEXT1 </td>
<td> <a class='unique identifier' ...> TEXT2 </a></td>
</tr>
我想要&#34; TEXT1&#34;和&#34; TEXT2&#34;。我知道如何获得&#34; TEXT2&#34;:它总是在<a>
标签中,到目前为止我的解决方案是
//a[(@class="unique identifier")]
注意:有时&#34; TEXT1&#34;是<p>
标签,有时它不是。有时会有其他标签,例如<b>
或<br>
或<em>
等。我认为我需要获取之前的<td>
内容。我找到的<a>
,但忽略了其中的任何其他元素。
我怎样才能告诉Nokogiri每一个&#34; TEXT2&#34;我已经找到回去并获得之前的<td>
,这样我就能得到#34; TEXT1&#34;?
答案 0 :(得分:2)
我会做类似的事情:
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 "]
我建议花时间阅读the XPath documentation因为这是非常基本的。