使用nokogiri将嵌套散列转换为XML [英] Converting nested hash into XML using nokogiri

查看:75
本文介绍了使用nokogiri将嵌套散列转换为XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  {: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 =bar3foo4 =foo5bar5foo2 = BAR2\" /> 
< foo>栏< / foo>


解决方案

这个怎么样? b

  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>巴≤; /富>< foo1>< foo2的> BAR2< / foo2的>< foo3> BAR3< / foo3>< foo4>< foo5> BAR5< / foo5>< / foo4> < / foo1>中


I have many levels of nested hash like:

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

How can I convert them into an XML like this?:

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

I have tried the xml.send method, but it converts the above nested hash to:

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

解决方案

How about this?

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

这篇关于使用nokogiri将嵌套散列转换为XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆