2011-06-05 14 views
13

Tengo un controlador de rieles que se va a salida de un hash en formato XML - por ejemplo:Rieles: Representación XML añade <hash> etiqueta

class MyController < ApplicationController 
    # GET /example.xml 
    def index   
    @output = {"a" => "b"} 

    respond_to do |format| 
     format.xml {render :xml => @output} 
    end 
    end 
end 

Sin embargo, los carriles añade una etiqueta de hash < >, que me no quiero, es decir:

<hash> 
    <a> 
    b 
    </a> 
</hash> 

¿Cómo puedo simplemente imprimir esto en su lugar?

<a> 
    b 
</a> 

Respuesta

18

Creo que si va a convertir un objeto a XML, necesita una etiqueta que envuelve todo, pero se puede personalizar el nombre de la etiqueta de la envoltura:

def index   
    @output = {"a" => "b"} 

    respond_to do |format| 
    format.xml {render :xml => @output.to_xml(:root => 'output')} 
    end 
end 

Lo que resultará en:

<output> 
    <a> 
    b 
    </a> 
</output> 
+0

Eso hará lo que necesito. ¡Gracias! –

+1

La etiqueta "salida" puede ajustarse a sus necesidades, pero no responde la pregunta. nada fue eliminado ... solo fue reemplazado. la raíz todavía está allí. – baash05

6

que estaba teniendo la misma emisión;

Esta es mi XML:

<?xml version="1.0" encoding="UTF-8"?> 
<Contacts> 
    <Contact type="array"> 
    </Contact> 
</Contacts> 

que estaba usando esto:

entries.to_xml 

para convertir los datos de hash en XML, pero esto envuelve datos de entradas en <hash></hash>

Así que he modificado :

entries.to_xml(root: "Contacts") 

pero eso aún envolvió el XML convertido en 'Contactos'. modificando mi código XML a

<Contacts> 
<Contacts> 
    <Contact type="array"> 
    <Contact> 
    <Name></Name> 
    <Email></Email> 
    <Phone></Phone> 
    </Contact> 
    </Contact> 
</Contacts> 
</Contacts> 

Así que agrega una RAÍZ extra que no quiero.

Ahora solución a este lo que funcionó para mí es:

entries["Contacts"].to_xml(root: "Contacts") 

que evita <hash></hash> o cualquier raíz adicionales que deban incluirse. ¡Saludos!

Cuestiones relacionadas