使用XmlSimple在ruby中处理XML文件

时间:2010-11-02 15:04:31

标签: ruby xml hash

我有一个复杂的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方法?

1 个答案:

答案 0 :(得分:1)

“复杂的XML文件”和XmlSimple不混合。使用Nokogiri可以更轻松地解决您的任务,并且速度更快:

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

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