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か、単にreadを呼び出すことで、ioのようなオブジェクトを取得できます:http://rubyzip.sourceforge.net/classes/Zip/ZipEntry.html#M000135

于 2012-07-06T10:25:33.070 に答える