2009-11-16 8 views
28

は私が最終的に必要な特定のXMLです:RubyハッシュをXMLに変換するにはどうすればよいですか?ここ

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

しかし、私はメソッドにデータを送信しているコントローラ(Ruby on Rails)を持っていると言います。

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

ハッシュをそのXML形式に変換するにはどうすればよいですか。

答えて

63

あなたはこれで探しているものにかなり近い得ることができるので、activesupportのは、ハッシュへto_xmlメソッドを追加します。

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

とで終わる:

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

注アンダースコアことダッシュに変換されます。

+0

ああ、ルートオプションは私を捨てていたものでした。ありがとう! – Shpigford

+0

このメソッドを使用してXML要素に属性を追加するにはどうすればよいですか? – doremi

+3

あなたは 'sudo gem install activesupport'とコード' 'active_support/core_ext"に 'Hash#to_xml'を要求します –

3

このデータがモデルの場合は、to_xmlを上書きしてください。

それ以外の場合は、Builderが適しています。

+1

さて、to_xmlを試してみましたが、XMLの周りにというタグが追加されています。すなわち、 ... Shpigford

+0

は、あなたの顧客のハッシュアクティブレコードオブジェクトですか? – bensie

+1

http://api.rubyonrails.org/classes/ActiveRecord/Serialization.html#M001876を参照して、XMLの構造化方法をオーバーライドする方法を確認してください。 – bensie

3

私はXmlSimpleのような施設を提供するような宝石を提案します。

+0

これは私がRailsを使用していないので私にとってはうまくいった。ここではハッシュからxmlへの1つのライナーがあります: 'XmlSimple.xml_out(ハッシュ、{:キープルート=> true、:noescape => true})' –

2

私の大学ではちょっと前の話題について短い説明をしました。 Hereはスライドです(興味がある部分は> = 37ページから始まります)

2

宝石gyokuとてもいいです。

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

などの便利なオプションがあります。

+0

偉大な投稿、あなたはJSONに変換する宝石の知っていますか? –

+0

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

関連する問題