2009-11-16 7 views
28

Voici le XML spécifique j'ai besoin en fin de compte:Comment convertir un hachage Ruby en XML?

<?xml version="1.0" encoding="UTF-8"?> 
<customer> 
    <email>[email protected]</email> 
    <first_name>Joe</first_name> 
    <last_name>Blow</last_name> 
</customer> 

Mais que j'ai un contrôleur (Ruby on Rails) qui envoie les données à une méthode. Je préfère l'envoyer comme un hachage, comme ceci:

:first_name => 'Joe', 
:last_name => 'Blow', 
:email => '[email protected]' 

Alors, comment puis-je convertir le hachage à ce format XML?

Répondre

63

ActiveSupport ajoute une méthode to_xml Hash, vous pouvez donc être assez proche de ce que vous cherchez avec ceci:

my_hash = { :first_name => 'Joe', :last_name => 'Blow', :email => '[email protected]'} 
my_hash.to_xml(:root => 'customer') 

Et retrouvez avec:

<?xml version="1.0" encoding="UTF-8"?> 
<customer> 
    <last-name>Blow</last-name> 
    <first-name>Joe</first-name> 
    <email>[email protected]</email> 
</customer> 

Notez que les underscores sont convertis en tirets.

+0

Ah bien, l'option racine était ce qui me jetait. Merci! – Shpigford

+0

Comment ajouter des attributs à un élément XML en utilisant cette méthode? – doremi

+3

vous aurez besoin de: 'sudo gem install activesupport' et dans le code' require 'support_active/core_ext "' pour avoir 'Hash # to_xml' –

3

Si ces données sont un modèle, examinez to_xml. En revanche, Builder est une bonne option.

+1

Eh bien, j'ai essayé to_xml et il ajoute une balise autour de mon XML. c'est à dire. ... Shpigford

+0

Est-ce votre hachage client un objet d'enregistrement actif? – bensie

+1

Consultez http://api.rubyonrails.org/classes/ActiveRecord/Serialization.html#M001876 pour plus d'informations sur la manière dont vous souhaitez structurer votre XML. – bensie

3

Je suggère une gemme comme XmlSimple qui fournit ce genre de facilité.

+0

Cela a fonctionné pour moi car je n'utilise pas Rails. Voici un one-liner pour hash au xml: 'XmlSimple.xml_out (hash, {: keeproot => vrai,: noescape => vrai})' –

2

J'ai fait une courte présentation sur ce sujet à mon université il y a quelques temps. Here sont les diapositives (La partie intéressante commence à> = page 37)

2

Gem gyoku très agréable.

Gyoku.xml(:lower_camel_case => "key")  
# => "<lowerCamelCase>key</lowerCamelCase>" 

Gyoku.xml({ :camel_case => "key" }, { :key_converter => :camelcase }) 
# => "<CamelCase>key</CamelCase>" 

Gyoku.xml({ acronym_abc: "value" }, key_converter: lambda { |key| key.camelize(:lower) }) 
# => "<acronymABC>value</acronymABC>" 

et d'autres options utiles.

+0

Great post, connaissez-vous des Gem qui convertissent en JSON? –

+0

@AlejandroMontilla [Oj] (https://github.com/ohler55/oj) – rojcyk

Questions connexes