From: Pit Capitain Date: 2007-01-27T22:45:37+09:00 Subject: Re: Howto write SAX2Parser stream in to a file Luca g. Soave schrieb: > I'm new to Ruby and trying to write a stream in to a file, > but I can just get an empty one. I tryed in different way > found heare on the forum ( IO lib, Rio lib, > out_file << "#{doc.parse}" and so on ). > > Here I show you the simplest : > > ----------------------------------------- > require 'rexml/parsers/sax2parser' > > file = File.new "lapatyXML.xml" > doc = REXML::Parsers::SAX2Parser.new file > > doc.listen(:characters, ["title"]) do |title| > print "\"#{title}\" : " > end > doc.listen(:characters, ["link"]) do |link| > print "#{link} : " > end > doc.listen(:characters, ["dc:date"]) do |date| > print "#{date} : " > end > doc.listen(:characters, ["dc:subject"]) do |subject| > puts "#{subject}" > end > > File.open("outfile.xls","w") do |out_file| > out_file.write "#{doc.parse}" > end > ------------------------------------------ > > Nothing seems to work, I just get an empty file "outfile.xls" . Luca, welcome to Ruby! I've never used REXML before, so all this might be completely wrong, but with the line out_file.write "#{doc.parse}" you are writing the result of the #parse method to the output file, which might be just an empty string if the result is nil. I think all the calls of print and puts in your listeners just write to the console where you run your script. To get what you want I would try to change your program to: require 'rexml/parsers/sax2parser' file = File.new "lapatyXML.xml" doc = REXML::Parsers::SAX2Parser.new file File.open("outfile.xls","w") do |out_file| doc.listen(:characters, ["title"]) do |title| out_file.print "\"#{title}\" : " end doc.listen(:characters, ["link"]) do |link| out_file.print "#{link} : " end doc.listen(:characters, ["dc:date"]) do |date| out_file.print "#{date} : " end doc.listen(:characters, ["dc:subject"]) do |subject| out_file.puts "#{subject}" end doc.parse end Regards, Pit