Savon将XML作为字符串返回,而不是哈希

时间:2012-04-09 20:10:04

标签: ruby xml savon

我正在尝试使用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

1 个答案:

答案 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] }