目标:
将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属性是如何显示的。
如何解决这个问题?
答案 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!"}, {}]}}