我正试图使用Nokogiri从HTML文件中提取数据,使用以下代码:
@doc = Nokogiri::HTML("<table >
<tr BGCOLOR="#eeeeee">
<td>SPILLED</td>
</tr>
<tr BGCOLOR="#eeeeee">
<td >RUSTING</td>
</tr>
</table>")
@doc.xpath('//tr[@bgcolor="#eeeeee"]').each do |record|
print record
record.xpath("//td").each do |cell|
print cell
end
end
第一个块似乎按预期工作,每次通过record
都只包含其中一行。另一方面,第二个块访问两行的<td>
元素,这让我感到困惑,因为record
变量显示它在进入内部块之前只具有一行的数据。
当"记录"在内部块中时,它是如何拥有两行的数据的?
弄清楚了——"td"前面的"//"导致搜索返回到树上,在记录变量的上方,即记录中的元素仍然与父元素有关系,等等。消除"//"解决了这个问题。