2010-11-02 47 views
0

我有一個複雜的XML文件,我想從中提取特定標記的內容。 我用XmlSimple gem使用ruby腳本。我用HTTP請求檢索XML文件,然後去掉所有不需要的標籤並提取必要的信息。這是劇本本身:用XmlSimple處理Ruby中的XML文件

data = XmlSimple.xml_in(response.body) 
hash_1 = Hash[*data['results']] 


def find_value(hash, value) 
    hash.each do |key, val| 
    if val[0].kind_of? Hash then 
     find_value(val[0], value) 
    else 
     if key.to_s.eql? value 
     puts val 
     end 
    end 
    end 
end 

hash_1['book'].each do |arg| 
    find_value(arg, "title") 
    puts("\n") 
end 

的問題是,當我改變與return val取代puts val,然後調用find_value法puts find_value (arg, "title"),我得到hash_1 [圖書]在屏幕上的全部內容。

如何更正find_value方法?

回答

1

「複雜的XML文件」和XmlSimple不能混用。用Nokogiri可以解決你的任務,並且速度也會更快:

require 'nokogiri' 
doc = Nokogiri::XML(response.body) 

puts doc.xpath('//book/title/text()') 
+0

是的,似乎我剛剛使用了錯誤的寶石來完成此任務。謝謝 ) – 2010-11-03 10:13:43