使用rubyzip解压缩后读取xml文件

时间:2012-07-06 10:09:43

标签: ruby-on-rails ruby zip rubyzip

 require 'active_support/core_ext'
 require 'open-uri'
 require 'zip/zip'


 zipfilename = open(url which returns a zip file with no of xml files inside)
 Zip::ZipFile.open(zipfilename) do |zipfile|
   zipfile.each do |entry|  
    xml = File.open(entry).read
    xml_to_hash = Hash.from_xml(xml)
   end
end

当我打印尝试打印变量条目时,它以file_name.xml形式出现。错误来自 xml = File.open(entry).read。

错误:

test.rb:51:in `initialize': can't convert Zip::ZipEntry into String (TypeError)
from test.rb:51:in `open'
from test.rb:51:in `block (2 levels) in <main>'

2 个答案:

答案 0 :(得分:4)

而不是

xml = File.open(entry).read

xml = zipfile.read(entry)

答案 1 :(得分:2)

你正在迭代的entry不是真正的文件。它只代表存档中的文件。我认为您需要将类型为Zip::ZipEntry的条目转换为可以读取的内容。

请参阅http://rubyzip.sourceforge.net/classes/Zip/ZipFile.html

上的示例

据我所见,你可以通过拨打get_input_stream或者只是致电阅读:http://rubyzip.sourceforge.net/classes/Zip/ZipEntry.html#M000135

来获得类似io的对象