2

我在我的 RoR 应用程序中使用 Savon。

这是我对服务的调用:

client = Savon::Client.new(MY_SOAP_CLIENT)

response = client.request :wsdl, :get_history do
    soap.body = "<startDate>2011-09-23</startDate><endDate>2011-09-24</endDate><userId>3</userId>"
end

我得到了 XML 的下一个响应:

<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">
<soapenv:Body xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">
<resMessage xmlns=\"http://xxx-xxx.xxx.edu/xxx/\">
    <result>date=2011-09-23?amount=13.00?time=08:50:38?user=a00123?type=transfer</result>
    <result>date=2011-09-23?amount=3.00?time=08:51:27?user=a00123456?type=transfer</result>
    <result>date=2011-09-23?amount=20.00?time=09:49:00?user=a00123456?type=transfer</result>
</resMessage></soapenv:Body></soapenv:Envelope>

但是,主要问题是当我打电话时,response.to_hash我只得到 Date 对象部分:

=> [2011 年 9 月 23 日星期五、2011 年 9 月 23 日星期五、2011 年 9 月 23 日星期五]

这对日期来说很好,但结果的另一部分缺失:数量、时间、用户和类型。另外,如果我打电话response.body,我会不断得到相同的结果:

=> {:res_message=>{:result=>[周五,2011 年 9 月 23 日,周五,2011 年 9 月 23 日,周五,2011 年 9 月 23 日,周五,2011 年 9 月 23 日,周五,2011 年 9 月 23 日],:@xmlns=>" http://xxx-xxx.xxx.edu/xxx/"}, :"@xmlns:soapenv"=>"http://schemas.xmlsoap.org/soap/envelope/"}

我在这里没有找到解决方案,也没有找到 Savon 问题

提前致谢

4

1 回答 1

1

你可以使用:

h = Hash.from_xml(response.to_xml)

这会给你一个正确的哈希值。

Ruby (RoR) XML 散列然后显示在视图中

于 2011-09-24T22:26:22.477 回答