Nokogiri Xpath双循环

时间:2011-09-21 18:06:54

标签: ruby xpath nokogiri scraper

我正在尝试做的是使用类默认值来包含td的代码块。这完全没问题。但后来我需要理清代码块的不同部分。当我尝试使用第二个xpath调用时,它每次打印每个块中的所有结构时都会执行此操作

   def HeaderProcessor(doc)         
        doc.xpath("//td[@class='default']").each do |block|             
            puts block.xpath("//span[@class='comhead']").text
        end
    end

当我打印出块时,每个块打印一次并包含注释标题和注释。当我尝试运行xpath时,它打印出在doc中找到的每个comhead,并且似乎忽略了块变量。

关于如何使这项工作的任何想法?我对Xpath有什么理解?

更新:

<td class="default">
<div style="margin-top:2px; margin-bottom:-10px; ">
<span class="comhead">
#some data        
</span></div>
<br><span class="comment"><font color="#000000">#some more data</span>
</td>

1 个答案:

答案 0 :(得分:2)

当你说//span[@class='comhead']时,你告诉Nokogiri从根搜索,你只想要*/span[@class='comhead']

doc.xpath("//td[@class='default']").each do |block|
    block.xpath("*/span[@class='comhead']").each do |span|
        puts span.text
    end
end

甚至只是这个:

doc.xpath('//td[@class="default"]/*/span[@class="comhead"]').each do |span|
    puts span.text
end

如果您不需要对<td>元素执行任何操作。