如何使用Hpricot搜索所有元素的inner_text?

时间:2013-09-17 19:45:17

标签: ruby-on-rails ruby nokogiri hpricot

我想使用Hpricot扫描所有元素的inner_text,并知道当前正在扫描的元素。但是,我采取的每种方法都会导致递归。是否有内置函数与Hpricot(或Nokogiri)一起执行此操作?下面的代码只扫描一个级别:

@t = []
doc = Hpricot(open("some html doc"))
(doc/"html").each do |e|
  e.children.each do |child|
    if child.is_a?(Hpricot::Text)
      @t << child.to_s.strip
    end
  end
end

1 个答案:

答案 0 :(得分:1)

虽然我不确定为什么你想要收集所有文本节点(也许有一个更有效的解决方案),但这应该让你开始:

require 'nokogiri'
doc = Nokogiri::HTML(open('doc'))

doc.at_css("body").traverse do |node|
  puts "***#{node.name}"
  puts node.text
end

它使用Nokogiri的traverse,它将访问起始节点下的所有节点。