2009-08-07 13 views
30

Soy completamente nuevo para Ruby. Todo lo que quiero es producir un archivo XML simple.Escribir en XML en ruby ​​

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

Eso es todo.

+19

Bueno, ahí lo tienes - guardarlo en un archivo: P – CiscoIPPhone

+0

que quería decir, utilizando un modelo de objetos. –

Respuesta

8

Puede usar builder para generar xml.

+0

Este enlace no funciona. –

4

Aquí hay un par más opciones para la construcción de XML en Ruby

REXML - incorporado, pero es muy lento, especialmente cuando se trata de grandes documentos

Nokogiri - más nuevos y más rápido, se instala como una rubygem

LibXML-Ruby - incorporado en la biblioteca libxml C, se instala también como rubygem

Si no puede instalar rubygems continuación REXML es sus mejores opciones. Si va a crear grandes documentos XML complejos, entonces Nokogiri o LibXML-Ruby es lo que desea usar.

+1

Todos estos son realmente para analizar xml existente, debe usar Builder para crear xml. – ocodo

+0

nokogiri obtuvo un [generador también] (http://nokogiri.org/Nokogiri/XML/Builder.html) - no estoy seguro de si es mejor, pero si está haciendo el análisis sintáctico y la escritura, puede ser agradable usar el mismo lib. – froderik

+0

El generador de Nokogiris parece enfocado en bloques. Funciona pero he encontrado que Builder es muy útil para construir xml programáticamente – PatrickWalker

64

Constructor probablemente debe ser su primer punto de parada:

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 

produce esto:

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

que se ve bastante bien para mí.

Unas referencias Constructor:

+0

El enlace de documentación de la API parece estar muerto (¿creo que Rubyforge.org ya no está más?). ¿Hay un enlace actualizado disponible? – pioto

+1

@pioto docs están disponibles en https://github.com/jimweirich/builder - He propuesto una edición para corregir el enlace en la publicación original, pero está pendiente de revisión. –

9

Basta con 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 
salida

Will:

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

Este es probablemente el ejemplo más simple de Nokogiri que he visto hasta ahora. Increíble. – Pred