Ruby:
Trabajando con XML

Cómo hacerlo:

Usaremos REXML, incluido con Ruby, para analizar un fragmento de XML:

require 'rexml/document'
include REXML

xml_data = <<-XML
<fruits>
  <fruit name="apple" color="green"/>
  <fruit name="banana" color="yellow"/>
</fruits>
XML

document = Document.new(xml_data)
document.elements.each('fruits/fruit') { |element|
  puts "Nombre: #{element.attributes['name']}, Color: #{element.attributes['color']}"
}

Salida:

Nombre: apple, Color: green
Nombre: banana, Color: yellow

Generar XML también es sencillo:

doc = Document.new
doc.add_element 'fruits'
apple = doc.root.add_element 'fruit', {'name' => 'apple', 'color' => 'green'}
banana = doc.root.add_element 'fruit', {'name' => 'banana', 'color' => 'yellow'}
puts doc

Salida XML:

<fruits>
  <fruit name="apple" color="green"/>
  <fruit name="banana" color="yellow"/>
</fruits>

Estudio detallado:

Las raíces de XML se remontan a los años 90 como un subconjunto simplificado de SGML para documentos web. Es verboso pero altamente estructurado, y es por eso que ha perdurado. No es el único método existente: JSON y YAML se han popularizado por su simplicidad, pero XML se mantiene firme en muchos sistemas empresariales y legados.

Ruby ofrece varias formas de abordar XML. REXML es una biblioteca completamente en Ruby que es fácil de comenzar a usar. Nokogiri es una gema que envuelve bibliotecas de C más rápidas, ofreciendo velocidad y características adicionales. ¿Decidir entre ellas? Comienza con REXML para tareas más pequeñas y pasa a Nokogiri si necesitas más potencia.

Por debajo, analizar XML se trata de traducir cadenas a modelos DOM o SAX. DOM crea un árbol en memoria, mientras que SAX transmite el documento y dispara eventos a medida que lo analiza. REXML ofrece ambos modelos, pero tiende a ser más lento que las extensiones de C como las que utiliza Nokogiri.

Ver también: