8

次のようなネストされたハッシュの多くのレベルがあります。

 { :foo => 'bar', :foo1 => { :foo2 => 'bar2', :foo3 => 'bar3', :foo4 => { :foo5 => 'bar5' }}}

このような XML に変換するにはどうすればよいですか?:

<foo>bar</foo>
<foo1>
    <foo2>bar2</foo2>
    <foo3>bar3</foo3>
    <foo4>
      <foo5>bar5</foo5>
    </foo4>
</foo1>

メソッドを試してみましたxml.sendが、上記のネストされたハッシュを次のように変換します。

<foo1 foo3="bar3" foo4="foo5bar5" foo2="bar2"/>
<foo>bar</foo>
4

3 に答える 3

11

これはどう?

class Hash
  def to_xml
    map do |k, v|
      text = Hash === v ? v.to_xml : v
      "<%s>%s</%s>" % [k, text, k]
    end.join
  end
end

h.to_xml
#=> "<foo>bar</foo><foo1><foo2>bar2</foo2><foo3>bar3</foo3><foo4><foo5>bar5</foo5></foo4></foo1>"
于 2012-08-13T11:51:27.373 に答える
0

Rails を使用している場合は、組み込みの to_xml メソッドを使用できます。

c = { :foo => 'bar', :foo1 => { :foo2 => 'bar2', :foo3 => 'bar3', :foo4 => { :foo5 => 'bar5' }}}

xml = c.to_xml

=> "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<hash>\n  <foo>bar</foo>\n  <foo1>\n    <foo2>bar2</foo2>\n    <foo3>bar3</foo3>\n    <foo4>\n      <foo5>bar5</foo5>\n    </foo4>\n  </foo1>\n</hash>\n"
于 2019-01-09T00:41:53.907 に答える