使用rails中的to_xml将键从数字更改为字符串?

时间:2014-12-10 06:23:38

标签: ruby-on-rails

如果您有哈希:

{"0" => "value"}

然后你把它变成XML:

{"0" => "value"}.to_xml

返回:

<?xml version="1.0" encoding="UTF-8"?>
<hash>
  <0>value</0>
</hash>

这导致Chrome和许多其他XML解析器窒息,因为节点名是一个整数。有没有人有一个聪明/简单的解决方案来解决这个问题?我正在使用respond_with和一个哈希,如果我不必在我的控制器中破坏该约定,那么就要加分。

1 个答案:

答案 0 :(得分:1)

您必须将密钥/节点名更改为非数字字符串,以使其成为有效的XML元素。

假设你可以在节目名前加上&#34;数字&#34;:

new_hash = {}
hash.each do  |k, v| 
  new_hash.merge!( k.gsub(/^\d/, "Digit#{k[0]}" ) => v ) 
end

new_hash.to_xml

See this for more details on xml nodes with integer names