Il built-in from_xml
Rails Hash
metodo farà esattamente quello che vuoi. Al fine di ottenere il vostro response.parsed_response
correttamente mappati ad un hash, è necessario gsub()
i ritorni a capo:
hash = Hash.from_xml(response.parsed_response.gsub("\n", ""))
hash #=> {"Result"=>{"success"=>"true"}}
Nel contesto di analisi di un hash in Rails, oggetti di String
tipo sono not substantively different di quelli di Symbol
da una prospettiva di programmazione generale. Tuttavia, è possibile applicare le rotaie symbolize_keys
metodo per l'output:
symbolized_hash = hash.symbolize_keys
#=> {:Result=>{"success"=>"true"}}
Come si può vedere, symbolize_keys
non operare su qualsiasi hash nidificati, ma si potrebbe scorrere hash interni e applicare symbolize_keys
.
L'ultimo tassello del puzzle consiste nel convertire la stringa "true"
nella booleana true
. AFAIK, non c'è modo di farlo sul tuo hash a posto, ma se si sta iterazione/operando su di esso, si potrebbe implementare una soluzione come quella suggested in this post:
def to_boolean(str)
return true if str == "true"
return false if str == "false"
return nil
end
In sostanza, quando si raggiunge l'interno coppia chiave-valore, si applica to_boolean()
al valore, che è attualmente impostato su "true"
. Nell'esempio, il valore restituito è il valore booleano true
.
http://www.railstips.org/blog/archives/2008/08/11/parsing-xml-with-ruby/ –