如何存储xml响应的嵌套哈希路径?

时间:2015-07-16 22:55:56

标签: ruby xml hash savon

我将以下xml响应从savon转换为hash

gridSVG::gridsvg(name = "~/Desktop/myPlot.svg", width = 15, height = 10)
myPlot
dev.off()

所以我可以用

挖掘那些sensor_data密钥对
{:read_measurements_list_response=>{:read_measurements_list_result=>{:sensor_data_list=>{:sensor_data=>[{:type=>"Humidity", :value=>"26.20"}, {:type=>"Temperature", :value=>"33.12"}, {:type=>"Light", :value=>"5501.0"}, {:type=>"SoilMoisture", :value=>"0.223"}, {:type=>"Conductivity", :value=>"0.031"}, {:type=>"GroundTemperature", :value=>"26.9"}]}}, :@xmlns=>"http://tempuri.org/"}}

如何将此路径存储到变量中,以便每当xml响应更改结构时我都可以更改它?我尝试过使用几件东西但没有用。能够做res_body [hash_path]会很高兴。

1 个答案:

答案 0 :(得分:1)

你要问两件事:

  
      
  1. 如何将此路径存储到变量中?
  2.   

这取决于您的环境:您可以将其存储在数据库,文件中,在代码中对其进行硬编码,将其作为方法的默认值传递等等。

  
      
  1. 能够做res_body [hash_path]
  2. 会很高兴   

您必须推出自己的解决方案。这样的事情可以奏效:

def hash_search(hash, keys)
  return hash.fetch(keys.first, nil) if hash.blank? || keys.size <= 1
  return hash_search(hash.fetch(keys[0], {}), keys[1..-1])
end

> hash = {a: {b: {c: 1}}}
=> {:a=>{:b=>{:c=>1}}}
> hash_search(hash, [:a, :b, :c])
=> 1
相关问题