2010-12-09 7 views
6

Estoy buscando usar Ruby savon para SOAP. Por razones puramente masoquistas, tengo que tratar con elementos SOAP que tienen atributos.¿Cómo uso los atributos anidados de Savon? ¿picadillo?

Por lo tanto, no hay problema, hay un ejemplo en el sitio docs savon que destaca esta capacidad:

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

Mi problema es cómo fijo atributos en elementos secundarios, por ejemplo, digamos que añadir una dirección de elemento secundario a persona:

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

Ahora quiero añadir un atributo id al elemento de dirección:

es no ir si la dirección que anidan en el hash de atributos:

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

Así que mi pregunta es, ¿cómo puedo obtener esto?

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

Respuesta

14

estaban cerca - sólo tenía que poner la llave :attributes! en el mismo hash que contiene el valor.

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

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

Me encontré con que la respuesta anterior ya no funcionaba. Eventualmente encontré https://github.com/savonrb/savon/issues/518 que me llevan a la sintaxis correcta para agregar atributos ahora.

Así que el ejemplo anterior ahora se llevaría a cabo como

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

lo que generaría el siguiente código XML

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

cómo puedo utilizar para este bloque .. 40665905851 chirag7jain

+0

¡Gracias por eso! –

+3

En caso de que algún alma pobre venga buscando información sobre la generación de atributos de Savon XML: 'dirección: {'contenido!':" Downing street ", '@id': 44}' generará ' Downing Calle ' – Sharagoz

Cuestiones relacionadas