我正在尝试使用Savon解析SOAP响应。响应是XML,但作为一个长字符串返回。如果我使用#to_hash,整个XML对象仍然是一个字符串,现在存储在
中hash[:response][:return]
这意味着它仍然是一个巨大的无法使用的混乱。
我的代码看起来像
response = soapClient.request(:get_sites_user_can_access) do
soap.body = { :sessionid => session[:login_response][:login_return],
:eid => user }
end
rep = response.to_hash
pp rep[:get_sites_user_can_access_response][:get_sites_user_can_access_return]
我错过了从响应中获取有用信息的哪一步?注意:遗憾的是,由于它包含的信息,我无法发布XML响应,但它看起来像一个整个XML文档存储为字符串。它的类是 Nori :: StringWithAttributes
答案 0 :(得分:3)
我能够获得所需的结果,但使用this documentation解析Nori字符串(?)。这似乎是一个不太理想的方法,但我意识到最后一个元素是一个哈希数组。所以它是散列的散列,带有散列数组。无论如何,这对我有用。关于如何使这种不那么丑陋和笨重的建议将不胜感激。
response = soapClient.request(:get_sites_user_can_access) do
soap.body = { :sessionid => session[:login_response][:login_return],
:eid => user }
end
rep = response.to_hash[:get_sites_user_can_access_response][:get_sites_user_can_access_return]
hrep = Nori.parse(rep)
hrep[:list][:item].each { |item| pp item[:site_id] }