0
 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>'
4

2 回答 2

4

代替

xml = File.open(entry).read

尝试

xml = zipfile.read(entry)
于 2012-07-06T10:34:15.073 回答
2

entry您正在迭代的不是真实文件。它只是代表档案中的一个文件。我认为您需要将输入的类型Zip::ZipEntry转换为可以阅读的内容。

请参阅http://rubyzip.sourceforge.net/classes/Zip/ZipFile.html中的示例

据我所见,您可以通过调用get_input_stream或仅调用读取来获得类似 io 的对象:http ://rubyzip.sourceforge.net/classes/Zip/ZipEntry.html#M000135

于 2012-07-06T10:25:33.070 回答