以下是SOAPUI中SOAP请求的响应
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<PostApplication_V5Response xmlns="http://QuiddiServicePricePoints.org/">
<PostApplication_V5Result><![CDATA[<QuiddiSerivce>
<Application>
<Status>PURCHASED</Status>
<RedirectURL>http://www.google.com?test=abc&xyz=123</RedirectURL>
</Application>
</QuiddiSerivce>]]></PostApplication_V5Result>
</PostApplication_V5Response>
</soap:Body>
</soap:Envelope>
然而,当我从Savon请求中获得response.body
时,它返回
{:post_application_v5_response=>{:post_application_v5_result=>"<QuiddiSerivce><Application><Status>PURCHASED</Status><RedirectURL>http://www.google.com?test=abc&xyz=123</RedirectURL></Application></QuiddiSerivce>", :@xmlns=>"http://QuiddiServicePricePoints.org/"}}
正如您所看到的,我需要的数据,即Status和RedirectURL,我们仍然是XML格式。
我已尝试使用[:post_application_v5_response][:post_application_v5_result]
将Hash.from_xml()
转换为哈希,但由于RedirectURL中的非法字符而失败。
如何正确转义RedirectURL中的字符,以便将结果转换为哈希值,或以其他方式访问Status和RedirectURL?
答案 0 :(得分:2)
您可以使用Nokogiri来解析响应正文。然后在解析的文档中搜索所需的值。
require 'nokogiri'
response_body = {:post_application_v5_response=>{:post_application_v5_result=>"<QuiddiSerivce><Application><Status>PURCHASED</Status><RedirectURL>http://www.google.com?test=abc&xyz=123</RedirectURL></Application></QuiddiSerivce>", :@xmlns=>"http://QuiddiServicePricePoints.org/"}}
res = Nokogiri.XML(response_body[:post_application_v5_response][:post_application_v5_result])
p res.search('Status').text
p res.search("RedirectURL").text
结果是:
#=> "PURCHASED"
#=> "http://www.google.com?test=abc=123"