同时访问Nokogiri的两个元素



我有一些格式怪异的HTML文件需要解析。

这是我的Ruby代码:

File.open('2.html', 'r:utf-8') do |f| 
    @parsed = Nokogiri::HTML(f, nil, 'windows-1251')
    puts @parsed.xpath('//span[@id="f5"]//div[@id="f5"]').inner_text
end

我想解析一个包含以下内容的文件:

<span style="position:absolute;top:156pt;left:24pt" id=f6>36.4.1.1. варенье, джемы, конфитюры, сиропы</span>
<div style="position:absolute;top:167.6pt;left:24.7pt;width:709.0;height:31.5;padding-top:23.8;font:0pt Arial;border-width:1.4; border-style:solid;border-color:#000000;"><table></table></div>
<span style="position:absolute;top:171pt;left:28pt" id=f5>003874</span>
<div style="position:absolute;top:171pt;left:99pt" id=f5>ВАРЕНЬЕ &quot;ЭКОПРОДУКТ&quot; ЧЕРНАЯ СМОРОДИНА</div>
<div style="position:absolute;top:180pt;left:99pt" id=f5>325гр.  </div>
<div style="position:absolute;top:167.6pt;left:95.8pt;width:2.8;height:31.5;padding-top:23.8;font:0pt Arial;border-width:0 0 0 1.4; border-style:solid;border-color:#000000;"><table></table></div>

我需要用id==5选择<div><span>。使用我当前的XPath选择器,这是不可能的。例如,如果我删除//span[@id="f5"],则div被正确选择。我可以一个接一个地输出它们:

puts @parsed.xpath('//div[@id="f5"]').inner_text
puts @parsed.xpath('//span[@id="f5"]').inner_text

但那样的话,订单就会一团糟。解析的span必须直接位于原始文件的div之下。

我是不是错过了一些基础知识?我在网上没有找到任何关于两个元素的并行解析的内容。例如,大多数帖子都关心解析div的两个类,但不是一次解析两个不同的元素。

如果我理解正确,您可以使用以下XPath:

//*[self::div or self::span][@id="f5"]

xpathtester demo

上面的XPath将查找名为divspan的元素,这些元素的id属性值等于"f5"

输出:

<span id="f5" style="position:absolute;top:171pt;left:28pt">003874</span>
<div id="f5" style="position:absolute;top:171pt;left:99pt">ВАРЕНЬЕ "ЭКОПРОДУКТ" ЧЕРНАЯ СМОРОДИНА</div>
<div id="f5" style="position:absolute;top:180pt;left:99pt">325гр.</div>

相关内容

  • 没有找到相关文章