Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

ruby - How do I use savon nested attributes! hash?

I'm looking at using Ruby savon for SOAP. For purely masochistic reasons I have to deal with SOAP elements having attributes.

So, no problem, there is an example on the savon docs site which highlights this ability:

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

My problem is how do I set attributes on child elements, for example, say I add an address child element to person:

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

Now I want to add an id attribute to the address element:

It's no go if I nest address in the attributes hash:

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

So my question is, how can I get this?

<person id=666><address id=44></address></person>
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I ran across the issue of the previous answer no longer working. Eventually I found https://github.com/savonrb/savon/issues/518 which lead me to the correct syntax to add attributes now.

So the previous example would now be done as

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

Which would generate the following xml

<person id="666">
  <address id="44"/>
</person>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...