您好,感谢您之前的帮助。 我试图弄清楚如何让肥皂体处理重复的元素。 喜欢。
<createAccount>
<param>[email protected]</param>
<key>TextMailbox</key>
<param>
<subKey key="RealName">John Doe</subKey>
<subKey key="Password">soappass</subKey>
</param>
</createAccount>
我发现很难插入重复的参数,因为它是一个哈希。 我应该手动执行此操作吗?
-乔
嘿乔,
您可以将数组用于重复元素。 这很自然。 例如:
{ :key => "TextMailbox",
:param => [
"[email protected]",
{ :subKey => ["John Doe", "soappass"]}
]
}
但是您的 subKey 标签的属性有问题。 通常要将属性分配给哈希值,您可以执行以下操作:
{ :subKey => "John Doe", :attributes! => { :subKey => { :key => "RealName" } } }
# translation: <subKey key="RealName">John Doe</subKey>
目前我担心这对重复元素不起作用,我已经在考虑如何解决这个问题。 现在,您可以使用 builder 执行以下操作:
xml = Builder::XmlMarkup.new
xml.tag! :subKey, { :key => "RealName" }, "John Doe"
xml.tag! :subKey, { :key => "Password" }, "soappass"
{ :key => "TextMailbox",
:param => [
"[email protected]",
xml.target!
]
}
顺便提一句。 您可以通过在哈希上调用to_soap_xml
来进行试验(尝试 irb)。 它是 savon 附带的核心扩展。
向开发分支添加了对此的支持:http: //github.com/rubiii/savon/commit/e8dd4fea1d8ab4d0d451fdfa254960c9a749b921
在下一个版本中,您将能够:
{ :key => "TextMailbox",
:param => [
"[email protected]",
{ :subKey => ["John Doe", "soappass"],
:attributes! => { :subKey => { :key => ["RealName", "Password"] } } }
]
}
这将为您提供与原始消息完全相同的 xml。
已发布的 0.7.6 版包含此问题的修复程序。 请更新。
+1 @rubiii
我对数组值有同样的问题,但是在数组内部我需要再次传入哈希值,该哈希值再次被覆盖
result = client.call(:sales_order_list, message: {
sessionId: session.body[:login_response][:login_return],
filters: {filter:
{
item:
{key: 'created_at', value:
{key: 'from', value: '2016-12-27 00:00:00'}
},
item: {key: 'created_at', value:
{key: 'to', value: '2016-12-27 23:59:59'}
}
}
}
})
我尝试了数组中的项目仍然被覆盖,我该如何解决这个问题?