我如何使用savon嵌套属性! 哈希?

我正在考虑使用Ruby savon for SOAP。 出于纯粹的自虐原因,我必须处理具有属性的SOAP元素。

所以,没问题,savon docs网站上有一个例子突出了这个能力:

{ :person => "Eve", :attributes! => { :person => { :id => 666 } } }.to_soap_xml "Eve" 

我的问题是如何在子元素上设置属性,例如,我将一个地址子元素添加到person:

 { :person => {:address => ""}, :attributes! => { :person => { :id => 666 } } }.to_soap_xml 

现在我想为地址元素添加一个id属性:

如果我在属性哈希中嵌套地址,那就不行了:

 { :person => {:address => ""}, :attributes! => { :person => { :id => 666, :address => {:id => 44 }} }}.to_soap_xml 

所以我的问题是,我怎么能得到这个?

 

你很亲密 – 只需要把:attributes! 键入包含该值的相同哈希。

 { :person => { :address => "", :attributes! => { :address => { :id => 44 } } }, :attributes! => { :person => { :id => 666 } } }.to_soap_xml # => "
"

我遇到了上一个问题不再有效的问题。 最终我找到了https://github.com/savonrb/savon/issues/518 ,它引导我使用正确的语法来添加属性。

所以前面的例子现在将完成

 { :person => { :@id => 666, :address => { :@id => 44 } } } 

哪个会生成以下xml