使用属性将XML转换为ruby哈希

时间:2014-10-15 11:03:02

标签: ruby-on-rails ruby xml

目标:

将XML转换为ruby Hash,包含所有节点和属性值

我尝试了什么:

xml  = 
  '<test id="appears">
    <comment id="doesnt appear">
      it worked
    </comment>
    <comment>
     see!
    </comment>
    <comment />
  </test>'

hash = Hash.from_xml(xml)

现在我得到这个哈希

#=>{"test"=>{"id"=>"appears", "comment"=>["it worked", "see!", nil]}}

注意第一个注释元素的id属性是如何显示的。

如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

主动支持XMLConverter类的问题 请将以下代码添加到任何初始化文件中。

module ActiveSupport
    class XMLConverter
        private
            def become_content?(value)
                value['type'] == 'file' || (value['__content__'] && (value.keys.size == 1 && value['__content__'].present?))
            end
    end
end

它会为您提供如下输出。

Ex输入XML

xml = '<album>
   <song-name type="published">Do Re Mi</song-name>
</album>'

Hash.from_xml(xml)

输出

{"album"=>{"song_name"=>{"type"=>"published", "__content__"=>"Do Re Mi"}}}

答案 1 :(得分:0)

我发现这里的解决方案是宝石

gem 'cobravsmongoose', '~> 0.0.2'

试试这个,

  hash =CobraVsMongoose.xml_to_hash(xml)

这是结果:

{"test"=>{"@id"=>"appears", "comment"=>[{"@id"=>"doesnt appear", "$"=>"it worked"}, {"$"=>"see!"}, {}]}}