Question

 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

when i print try to print variable entry, it comes out as file_name.xml . Error comes from xml = File.open(entry).read.

Error:

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>'
Was it helpful?

Solution

the entry you are iterating over is not a real file. it just represents a file in your archive. i think that you need to transform your entry wich is of type Zip::ZipEntry into something that can be read.

see the example at http://rubyzip.sourceforge.net/classes/Zip/ZipFile.html

as far as i have seen you can get an io like object by calling get_input_stream or just call read: http://rubyzip.sourceforge.net/classes/Zip/ZipEntry.html#M000135

OTHER TIPS

instead of

xml = File.open(entry).read

try

xml = zipfile.read(entry)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top