我想鑽到樹,並存儲所有級別:遞歸向下鑽取的引入nokogiri樹
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的。 http://mechanize.rubyforge.org/Mechanize/Page.html#method-i-search http://nokogiri.org/Nokogiri/XML/Node.html#method-i-search
什麼是「存儲所有的水平」呢?向我們展示您使用Nokogiri的代碼以及您的HTML或XML樣本。因爲你的問題不夠用。 –
嘗試遞歸 – tokland
只是想知道是否有一個乾淨的方式與注入。我可以做一個循環,但聽起來不像紅寶石般的方式。 –