1

I use Spyne framework to provide SOAP web service. I need to return something very similar to

<MyReturnObject>                             
 <MyList>
   <MyElement Name="Value1">value2</MyElement>
   <MyElement Name="Value2">value3</MyElement>
 </MyList>
</MyReturnObject>   

I tried the following

class MyElement(ComplexModel):
    Name = XMLAttribute(String)
class MyReturnObject(ComplexModel):
    MyList = Array(MyElement)

but that would result in

<MyReturnObject>                             
 <MyList>
   <MyElement Name="Value1"/>
   <MyElement Name="Value2"/>
 </MyList>
</MyReturnObject>  

Is there some way to specify a text value for a given attribute ? I really appreciate your help :)

Charles Duffy
  • 280,126
  • 43
  • 390
  • 441
mdaif
  • 21
  • 2

1 Answers1

0

This should work:

class MyElement(ComplexModel):
    Name = XmlAttribute(String)
    Data = XmlData(Unicode)

class MyReturnObject(ComplexModel):
    MyList = Array(MyElement)

Usage:

from lxml import etree
from spyne.util.xml import get_object_as_xml

obj = MyReturnObject(MyList=[
    MyElement('value2', Name='Value1'),
    MyElement('value3', Name='Value2'),
])

elt = get_object_as_xml(obj, MyReturnObject)
print(etree.tostring(elt, pretty_print=True))

prints:

<MyReturnObject>
  <MyList>
    <MyElement Name="Value1">value2</MyElement>
    <MyElement Name="Value2">value3</MyElement>
  </MyList>
</MyReturnObject>
Burak Arslan
  • 7,671
  • 2
  • 15
  • 24