我有一个复杂的XML文件,我想从中提取特定标签的内容。 我使用带有XmlSimple gem的ruby脚本。我检索带有HTTP请求的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
问题是,当我将puts val
替换为return val
,然后使用puts find_value (arg, "title")
调用find_value方法时,我会在屏幕上获取hash_1 [book]的全部内容。
如何更正find_value方法?
答案 0 :(得分:1)
“复杂的XML文件”和XmlSimple不混合。使用Nokogiri可以更轻松地解决您的任务,并且速度更快:
require 'nokogiri'
doc = Nokogiri::XML(response.body)
puts doc.xpath('//book/title/text()')