web-dev-qa-db-ja.com

RubyハッシュをXMLに変換するにはどうすればよいですか?

私が最終的に必要とする特定の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形式に変換できますか?

31
Shpigford

ActiveSupportはto_xmlメソッドをHashに追加するので、これで探しているものにかなり近づくことができます。

Sudo gem install activesupport
require "active_support/core_ext"

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>

下線はダッシュに変換されることに注意してください。

70
ry.

このデータがモデルである場合は、to_xmlのオーバーライドをご覧ください。

それ以外の場合は、 Builder が適切なオプションです。

3
Steve Madsen

このような機能を提供する XmlSimple のような宝石をお勧めします。

3
plainprogrammer

宝石 gyok とてもいいです。

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

そしてより便利なオプション。

2
vk26

私はしばらく前に大学でそのトピックについて短いプレゼンテーションをしました。 ここ はスライドです(興味深い部分は> = 37ページから始まります)

2
Marc Seeger