私が最終的に必要とする特定の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形式に変換できますか?
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>
下線はダッシュに変換されることに注意してください。
このデータがモデルである場合は、to_xml
のオーバーライドをご覧ください。
それ以外の場合は、 Builder が適切なオプションです。
このような機能を提供する XmlSimple のような宝石をお勧めします。
宝石 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>"
そしてより便利なオプション。
私はしばらく前に大学でそのトピックについて短いプレゼンテーションをしました。 ここ はスライドです(興味深い部分は> = 37ページから始まります)