2012-04-09 37 views
1

我想使用Savon解析SOAP响应。响应是XML,但是作为一个长字符串返回。如果我使用#to_hash整个XML对象仍是一个字符串,现在存放在Savon将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

回答

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] } 
相关问题