0

我想使用 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
4

1 回答 1

1

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

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

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

它使用 Nokogiritraverse将访问您的起始节点下的所有节点。

于 2013-09-19T01:21:43.813 回答