2010-12-09 7 views
6

Ich suche mit Ruby Savon für SOAP. Aus rein masochistischen Gründen muss ich mich mit SOAP-Elementen mit Attributen beschäftigen.Wie verwende ich Savon geschachtelte Attribute! Hash?

Also kein Problem, es ist ein Beispiel auf der Website savon docs, die diese Fähigkeit hervorhebt:

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

Mein Problem ist, wie kann ich die Attribute auf untergeordneten Elemente, zum Beispiel sagen, dass ich eine Adresse hinzufügen Kind-Element zu Person:

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

Jetzt mag ich ein id-Attribut an die Adresse Element hinzuzufügen:

Es ist nicht gehen, wenn ich Nest-Adresse in dem Attribute hash:

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

Also meine Frage ist, wie kann ich das bekommen?

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

Antwort

14

Sie schließen wurden - nur die :attributes! Schlüssel in der gleichen Hash setzen benötigt, die den Wert enthält.

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

# => "<person id=\"666\"><address id=\"44\"></address></person>" 
15

Ich lief über das Problem der vorherigen Antwort nicht mehr funktioniert. Schließlich fand ich https://github.com/savonrb/savon/issues/518, die mich zu der korrekten Syntax führen, um Attribute jetzt hinzuzufügen.

So das vorherige Beispiel würde nun als

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

getan werden, das die folgenden xml

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

wie kann ich es für diesen Block verwenden erzeugen würde .. 40665905851 chirag7jain

+0

Vielen Dank dafür !! –

+3

Falls eine arme Seele nach Informationen über die Generierung von Savon-XML-Attributen sucht: 'address: {'content!':" Downing street "," @id ": 44} würde '

Downing generieren Straße
' – Sharagoz

Verwandte Themen