我正在考虑使用Ruby savon for SOAP。出于纯粹的自虐原因,我必须处理具有属性的SOAP元素。
所以,没问题,savon docs网站上有一个例子突出了这个能力:
{ :person => "Eve", :attributes! => { :person => { :id => 666 } } }.to_soap_xml
"<person id=\"666\">Eve</person>"
我的问题是如何在子元素上设置属性,例如,我将一个地址子元素添加到person:
{ :person => {:address => ""}, :attributes! => { :person => { :id => 666 } } }.to_soap_xml
现在我想在地址元素中添加一个id属性:
如果我在属性哈希中嵌套地址,那就没有了:
{ :person => {:address => ""}, :attributes! => { :person => { :id => 666, :address => {:id => 44 }} }}.to_soap_xml
所以我的问题是,我怎么能得到这个?
<person id=666><address id=44></address></person>
答案 0 :(得分:16)
我遇到了上一个问题不再有效的问题。最后我发现https://github.com/savonrb/savon/issues/518引导我使用正确的语法来添加属性。
所以前面的例子现在将以
完成{
:person => {
:@id => 666,
:address => {
:@id => 44
}
}
}
哪会生成以下xml
<person id="666">
<address id="44"/>
</person>
答案 1 :(得分:14)
你很接近 - 只需要将:attributes!
密钥放在包含该值的相同哈希中。
{
:person => {
:address => "",
:attributes! => { :address => { :id => 44 } }
},
:attributes! => { :person => { :id => 666 } }
}.to_soap_xml
# => "<person id=\"666\"><address id=\"44\"></address></person>"