我有一个哈希,
object = { :type => 'book', :name => 'RoR', :price => 33 }
OR
object = { :type => 'wig', :name => 'Elvis-Style', :price => 40, :color => 'black' }
问题是上面哈希中的键可能一直不同,甚至根据对象类型增加和减少。
我想要做的是使用Xml::Builder
为上面的哈希生成XML。 XML标记由散列中的keys
决定,标记内的text
是与该键对应的值。
我可以使用eval
执行此操作,如下所示。但是,我认为必须有更好的方法来实现它。
object.each do |key, text|
eval("xml.#{key.to_s} do
#{text}
end
")
end
答案 0 :(得分:2)
@object.each do |k, v|
xml.tag!(k.to_s, v)
end
答案 1 :(得分:1)
这个有效。
@object.each do |k, v|
xml.tag!(k.to_s, v)
end
答案 2 :(得分:1)
Rails在Hash类上支持to_xml
。
hash = { :type => 'book', :name => 'RoR', :price => 33 }
hash.to_xml
# Returns
# <?xml version=\"1.0\" encoding=\"UTF-8\"?>
# <hash>
# <type>book</type>
# <name>RoR</name>
# <price type=\"integer\">33</price>
# </hash>
如果您想跳过这些类型:
hash.to_xml(:skip_types => true)
如果你想给一个不同的根,那么:
hash.to_xml(:root => 'options')
答案 3 :(得分:-1)
out << "<#{key}>#{html_escape(value)}</#{key}>"