From: James Edward Gray II Date: 2005-07-23T03:14:14+09:00 Subject: Re: something similar to perl's XML::Simple On Jul 22, 2005, at 12:36 PM, Cam wrote: > Hi! > > I'm trying to write a few simple apps (a flash-card type program for > chinese characters, and a simple address book type program), and for > the file format i want to use XML. Anyway, i don't need anything > complex at all... just the most basic reading/writing of xml files > possible. i was looking through a bunch of the various ruby-xml > libraries, and it seems that rexml is the 'official' xml library for > ruby? I like the looks of it, but it seems overly complex for what i > want to do. My friend steve told me about a module in perl called > xml:simple (apparently it just loads up the xml file into a nice > little hash for you). Anyway, that sounds like just the thing for me, > and i was wondering if ruby had anything similar. If not maybe just > some simple example code for rexml (the debian packages didnt' seem to > come w/ any). Tips or suggestions on xm file i/o would be greatly > appreciated. Are you strictly tied to the XML idea? YAML is a standard Ruby library and pretty darn easy to use. Here's an example: $ ls yaml_example.rb $ cat yaml_example.rb #!/usr/local/bin/ruby -w require "YAML" unless File.exists? "contacts.yaml" # save some YAML # build up some example data... require "ostruct" contacts = Hash.new contact = OpenStruct.new contact.first_name = "James" contact.last_name = "Gray" contact.address = "Where Ever Dr." contact.state = "Edmond" contact.city = "OK" contact.zip = "12345" contacts["#{contact.last_name}, #{contact.first_name}"] = contact contact = contact.dup contact.first_name = "Dana" contacts["#{contact.last_name}, #{contact.first_name}"] = contact # store data in a YAML file File.open("contacts.yaml", "w") { |file| YAML.dump(contacts, file) } else # reload YAML data # load contacts = File.open("contacts.yaml") { |file| YAML.load (file) } # and use... p contacts["Gray, James"].first_name end $ ruby yaml_example.rb $ ls contacts.yaml yaml_example.rb $ cat contacts.yaml --- "Gray, James": !ruby/object:OpenStruct table: :city: OK :first_name: James :zip: "12345" :last_name: Gray :address: Where Ever Dr. :state: Edmond "Gray, Dana": !ruby/object:OpenStruct table: :city: OK :first_name: Dana :last_name: Gray :zip: "12345" :address: Where Ever Dr. :state: Edmond $ ruby yaml_example.rb "James" If you really do need XML, REXML is the way to go, in my opinion. It's not too hard to learn and it will grow with you. We've had a few Ruby Quizzes that dealt (in part) with XML writing and parsing. Scanning those solutions will show you examples. Here are some links... For writing XML see Hans Fugal's and Brian Kang's solutions to: http://www.rubyquiz.com/quiz6.html For reading XML see most of the solutions to: http://www.rubyquiz.com/quiz30.html Now to finally answer your actual question: Yes, we do have a port of XML::Simple. You can find the Ruby version here: http://www.maik-schmidt.de/xml-simple.html Hope that helps. James Edward Gray II