Ruby on rails '-';更改为'_';在rails中将xml转换为哈希时
xml=Ruby on rails '-';更改为'_';在rails中将xml转换为哈希时,ruby-on-rails,xml,hash,special-characters,Ruby On Rails,Xml,Hash,Special Characters,xml=“值” hash=hash.from_xml(xml)==>这给了我以下输出 {“外部标签”=>{“内部标签”=>“值”} 我实际上需要hash={“外部标记”=>{“内部标记”=>“值”} 是否有任何方法可以将XML转换为哈希而不将“-”更改为“”?让我们在第164行检查一下。Rails将散列键从-规范化为 因此,我提出了两种解决方案: 调用rails私有方法 xml = "<outer-tag><inner-tag>value</inner-tag>
“值”
hash=hash.from_xml(xml)==>这给了我以下输出
{“外部标签”=>{“内部标签”=>“值”}
我实际上需要hash={“外部标记”=>{“内部标记”=>“值”}
是否有任何方法可以将XML转换为哈希而不将“-”更改为“”?让我们在第164行检查一下。Rails将散列键从-
规范化为
因此,我提出了两种解决方案:
xml = "<outer-tag><inner-tag>value</inner-tag></outer-tag>"
hash = ActiveSupport::XmlMini.parse(xml)
result = ActiveSupport::XMLConverter.new("").send(:deep_to_h, hash)
这是更好的,但太长了,只是我的想法,欢迎任何意见 当我深入研究Rails源代码时,我认为它不可能调用XMLConverter的normalize_key方法,该方法将“-”替换为“-”。可能是其他任何人都可以解释一些全局配置,以防止出现这种情况。显然,您可以用一些sentinel值替换“-”,并在转换后将其替换回“-”
xml = "<outer-tag><inner-tag>value</inner-tag></outer-tag>"
hash = Hash.from_xml(xml)
normalize_keys = -> (params) do
case params
when Hash
Hash[params.map { |k,v| [k.to_s.tr('_', '-'), normalize_keys.call(v)] } ]
when Array
params.map { |v| normalize_keys.call(v) }
else
params
end
end
result = normalize_keys.call(hash)