DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Snippets has posted 5883 posts at DZone. View Full User Profile

Ruby CSV To XML Converter

03.19.2007
| 24129 views |
  • submit to reddit
        This code will take an input CSV file and output XML. IT was easy to write, but I haven't found anything out there to do this. The first line of the CSV file should contain the element names.

#!/usr/bin/ruby

require 'csv'

print "CSV file to read: "
input_file = gets.chomp

print "File to write XML to: "
output_file = gets.chomp

print "What to call each record: "
record_name = gets.chomp

csv = CSV::parse(File.open(input_file) {|f| f.read} )
fields = csv.shift

puts "Writing XML..."

File.open(output_file, 'w') do |f|
  f.puts '<?xml version="1.0"?>'
  f.puts '<records>'
  csv.each do |record|
    f.puts " <#{record_name}>"
    for i in 0..(fields.length - 1)
      f.puts "  <#{fields[i]}>#{record[i]}</#{fields[i]}>"
    end
    f.puts " </#{record_name}>"
  end
  f.puts '</records>'
end # End file block - close file

puts "Contents of #{input_file} written as XML to #{output_file}."
    

Comments

Snippets Manager replied on Fri, 2008/07/25 - 7:17am

Thanks for posting this code - this helped me out enormously. Ian. --

Snippets Manager replied on Sat, 2008/04/26 - 1:21pm

Until a few weeks ago, I didn't know anything about ruby either. But I do have some programming experience.... Don't know your background. This is the first place I started: http://www.ruby-lang.org/en/documentation/quickstart/ You could probably just do that much and copy the above script into the interactive ruby experience line-by-line to get the result you're looking for. For my particular needs (repeat: for MY PARTICULAR NEEDS), I'm ditching bash, perl, and php for ruby. I like it that much. Regards.

Snippets Manager replied on Tue, 2008/04/15 - 1:38pm

I am not a programmer but have need of your code to convert csv files to their xml versions. Your code is the closest I have found to accomplish this task. Trouble is I have no idea what Ruby is or how to run your code. My needs are a file that when executed will read a csv file of a specific name and save to an xml of a specific name (over writting any previous xml file). I would appreciate any suggestions as how to start