在Rails中打开和解压缩XML URL

时间:2010-04-30 18:06:24

标签: ruby-on-rails gzip

我正在构建一个rails应用程序,它从第三方服务器上托管的XML数据源中获取有关产品的信息。这个XML被gzip压缩,我很难用它去任何地方。

我在Google上花了相当多的时间,但我的搜索结果似乎更多是关于发送Gzip压缩输出而不是接收Gzip压缩输入。

关闭我来自StackOverflow的解决方案,但我仍然遇到错误。

我在第一个实例中尝试将XML数据打印到浏览器,然后我可以从处理它开始。这是我目前的代码:

   def load_data
     url = "http://xml.domain.com/datafeed/"
     xml_input = Net::HTTP.get(URI.parse(url))
     zstream = Zlib::Inflate.new
     @xml_output = zstream.inflate(xml_input)
     zstream.finish
     zstream.close
   end

我从中获得的错误是:

 Zlib::DataError in Cron/get datafeedController#load_data
  

不正确的标题检查

我想这意味着数据不是预期的格式,但我无法找到有关如何在任何地方正确执行此操作的信息。我已经排除的两件事是URL有效且响应是Gzip,但我仍然坚持如何克服这个问题。

非常感谢任何帮助: - )

1 个答案:

答案 0 :(得分:3)

排序!

file = Net::HTTP.get(URI.parse(url))
gz = Zlib::GzipReader.new(StringIO.new(file))
whole_xml = gz.read

然后加载到Hpricot进行XML解析:

hp = Hpricot(whole_xml)