2009-11-16 12 views
28

Hier ist die spezifische XML ich schließlich brauchen:Wie konvertiere ich einen Ruby-Hash in XML?

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

aber sagen, ich habe einen Controller (Ruby on Rails), die die Daten auf ein Verfahren sendet. Ich würde es vorziehen, sich als Hash zu senden, etwa so:

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

Also, wie kann ich den Hash zu diesem XML-Format konvertieren?

Antwort

63

Active fügt eine to_xml Methode Hash, so können Sie ziemlich nahe kommen, was Sie suchen mit diesem:

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

und am Ende mit:

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

Beachten Sie, dass die Unterstrichen werden in Bindestriche umgewandelt.

+0

Ah schön, die Root-Option war, was mich abwarf. Vielen Dank! – Shpigford

+0

Wie fügt man mit dieser Methode einem XML-Element Attribute hinzu? – doremi

+3

benötigen Sie: 'sudo gem install activesupport' und im Code' require "active_support/core_ext" 'mit' Hash # to_xml' –

3

Wenn es sich bei diesen Daten um ein Modell handelt, sehen Sie sich to_xml an.

Ansonsten ist Builder eine gute Option.

+1

Nun, ich habe versucht, to_xml und es ist ein Tag um meine XML. dh. ... Shpigford

+0

Ist Ihr Kunde Hash ein aktives Datensatzobjekt? – bensie

+1

In http://api.rubyonrails.org/classes/ActiveRecord/Serialization.html#M001876 finden Sie Informationen darüber, wie Sie Ihre XML strukturieren möchten. – bensie

3

Ich würde vorschlagen, ein Juwel wie XmlSimple, die diese Art von Einrichtung bietet.

+0

Das funktionierte für mich, da ich nicht mit Rails arbeite. Hier ist ein Einzeiler für Hash zu xml: 'XmlSimple.xml_out (Hash, {: keeproot => true,: noescape => true})' –

2

Ich habe eine kurze Präsentation über genau dieses Thema an meiner Universität vor einer Weile. Here sind die Folien (Interessanter Teil beginnt bei> = Seite 37)

2

Gem gyoku sehr schön.

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>" 

und weitere nützliche Optionen.

+0

Toller Beitrag, kennst du irgendwelche Edelsteine, die zu JSON konvertieren ?? –

+0

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

Verwandte Themen