Ruby 如何使用Savon向嵌套的XML数组添加属性?

Ruby 如何使用Savon向嵌套的XML数组添加属性?,ruby,xml,savon,Ruby,Xml,Savon,我正在使用SavonVersion2.2调用一些SOAP服务。对于简单的服务,一切正常。但是,有一个服务具有如下示例所示的复杂结构,每个组上都有重复组和属性: <sch:RequestControl> <sch:requestID>6989668868</sch:requestID> </sch:RequestControl> <sch:InquiryParam> <sch:crmParam name="AccountNumb

我正在使用SavonVersion2.2调用一些SOAP服务。对于简单的服务,一切正常。但是,有一个服务具有如下示例所示的复杂结构,每个组上都有重复组和属性:

<sch:RequestControl>
<sch:requestID>6989668868</sch:requestID>
</sch:RequestControl>
<sch:InquiryParam>
  <sch:crmParam name="AccountNumber">1234567</sch:crmParam>
  <sch:crmParam name="History">1</sch:crmParam>
</sch:InquiryParam>
基于savon和gyoku文档,我尝试了使用
:crmParam=>{:content!=>@account\u number,:attributes=>{'name'=>'AccountNumber'}}
和类似的组合,但在将XML格式化为类似示例时遇到了困难。我知道我可以通过将消息分配给
xml
来强制执行该消息,但这使得很难看到发生了什么


有人能建议一种修复方法,将属性放在
crmParam
标记中吗?

我不确定Savon是否能按照您的意愿处理Ruby数组,但下面的脚本应该能让您更好地了解您可以做些什么

require 'savon'

c = Savon.client(endpoint: "http://www.example.com",
                 namespace: "urn:ns.example.com",
                 log: true,
                 log_level: :debug,
                 pretty_print_xml: true)

r = c.call(:call,
           :message => { 
                  :InquiryParam => [ 
                         {"crmParam" => 123,
                        :attributes! => { "crmParam" => { "name" => "AccountNumber" }}},
                         {"crmParam" => 456,
                        :attributes! => { "crmParam" => { "name" => "history" }}}
                        ]
                  }
  message = {   :RequestControl =>
                 { :requestID => 6989668868 },

            :InquiryParam =>  [
                { :crmParam =>  { :content! => @account_number } ,
                  :attributes => { "crmParam" => {"name" => "AccountNumber"} }     },

                { :crmParam =>  { :content! => @history } ,
                  :attributes => { "crmParam" => {"name" => "History"} }     } ]
        }
require 'savon'

c = Savon.client(endpoint: "http://www.example.com",
                 namespace: "urn:ns.example.com",
                 log: true,
                 log_level: :debug,
                 pretty_print_xml: true)

r = c.call(:call,
           :message => { 
                  :InquiryParam => [ 
                         {"crmParam" => 123,
                        :attributes! => { "crmParam" => { "name" => "AccountNumber" }}},
                         {"crmParam" => 456,
                        :attributes! => { "crmParam" => { "name" => "history" }}}
                        ]
                  }