2016-02-16 36 views
2

XML = "<outer-tag><inner-tag>value</inner-tag></outer-tag>"' - ' 變更爲 '_' 而轉換XML散列在導軌

散列= Hash.from_xml(XML) ==>這給了我以下輸出

{ 「outer_tag」=> { 「inner_tag」=> 「值」}}

我確實需要散列= { 「外標籤」=> { 「內標籤」=> 「值」}}

有什麼辦法可以將XML轉換成哈希而不將「 - 」轉換爲「_」?

+0

當我向下挖掘Rails源代碼時,我認爲它不可能調用XMLConverter的normalize_key方法,它將' - '替換爲'_'。 可能是其他任何人都可以闡明一些全局配置,以防止這個 –

+0

顯然,您可以用一些標記值替換' - ',並在轉換後將其替換回' - ' –

回答

1

讓我們在線164導軌歸一哈希鍵檢查source code-_

於是,我拿出2級的解決方案:

  1. 呼叫軌私有方法

    xml = "<outer-tag><inner-tag>value</inner-tag></outer-tag>" 
    hash = ActiveSupport::XmlMini.parse(xml) 
    result = ActiveSupport::XMLConverter.new("").send(:deep_to_h, hash) 
    

這是有風險因爲軌道可以具有內部的變化,我們在易錯

_-

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) 

這是更好的

  • 轉換鍵,但時間更長,只是我的想法,歡迎任何評論!