ツリーをドリルダウンして、すべてのレベルを保存したい:
search_q = Regex.new("Some search regex here")
#something like: page.search('body').first.children.select {|x| x.text[search_q]}.first.children.select {|x| x.text[search_q]}.first......ad infinitum.
私はハックをしました:
arbitrarily_long_number = 100
drill = []
(0..arbitrarily_long_number).collect do |n|
  begin
    drill << eval("page.search('body')"+".first.children.select {|x| x.text[search_q]}" * n)
  rescue
    break
  end
end
問題は、これが「最初の」選択のみをドリルダウンすることです。すべてのノードをドリルスルーする方法はありますか? ある種の注入機能を考えていますが、まだ頭を抱えていません。どんな助けでも大歓迎です。
出力:
pp drill[-4]
puts
pp drill[-3]
puts
pp drill[-2]
#=>[#(Element:0x3fc2324522b4 {
   name = "u",
   children = [
     #(Element:0x3fc232060b60 {
       name = "span",
       attributes = [
         #(Attr:0x3fc2320603e0 {
           name = "style",
           value = "font-size: large;"
           })],
       children = [ #(Text "Ingredients:")]
       })]
   })]
[#(Element:0x3fc232060b60 {
   name = "span",
   attributes = [
     #(Attr:0x3fc2320603e0 { name = "style", value = "font-size: large;" })],
   children = [ #(Text "Ingredients:")]
   })]
[#(Text "Ingredients:")]
注: Nokogiri を活用する mechanize gem を使用しています。 http://mechanize.rubyforge.org/Mechanize/Page.html#method-i-search http://nokogiri.org/Nokogiri/XML/Node.html#method-i-search