Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Write to XML in ruby

Tags:

file

xml

ruby

People also ask

What is XML in Ruby?

XML is eXtensible Markup Language like HTML. It allows programmers to develop applications that can be read by other applications irrespective of operating system and developmental language used. It keeps track of small to medium amounts of data without any SQL based technique in backend.


Builder should probably be your first stopping point:

require 'builder'

def product_xml
  xml = Builder::XmlMarkup.new( :indent => 2 )
  xml.instruct! :xml, :encoding => "ASCII"
  xml.product do |p|
    p.name "Test"
  end
end

puts product_xml

produces this:

<?xml version="1.0" encoding="ASCII"?>
<product>
  <name>Test</name>
</product>

which looks about right to me.

Some Builder references:

  • author's (Jim Weirich) original blog post
  • API docs
  • article at XML.com

Simply with Nokogiri::XML::Builder

require 'nokogiri'

builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
  xml.root {
    xml.products {
      xml.widget {
        xml.id_ "10"
        xml.name "Awesome widget"
      }
    }
  }
end
puts builder.to_xml

Will output:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <products>
    <widget>
      <id>10</id>
      <name>Awesome widget</name>
    </widget>
  </products>
</root>

You can use builder to generate xml.


Here are a couple more options for constructing XML in Ruby

REXML - built-in but is very slow especially when dealing with large documents

Nokogiri - newer and faster, installs as a rubygem

LibXML-Ruby - built on the C libxml library, also installs as a rubygem

If you can't install rubygems then REXML is your best options. If you are going to be creating large complex XML docs then Nokogiri or LibXML-Ruby is what you would want to use.