Python 无界基元类型的XmlAttribute

Python 无界基元类型的XmlAttribute,python,spyne,Python,Spyne,我还没有找到一种方法来描述可重复原语类型的xml属性;到目前为止,我最好的猜测是: class联系人(ComplexModel): “联系人和沟通渠道” contactName=primitive.Unicode(最小长度=1,最大长度=70,可为零=False) channel=primitive.Unicode(最大值为unbounded) channelCode=XmlAttribute(枚举('TELEPHONE'、'TELEFAX'、'EMAIL'、'WEBSITE',键入\'u na

我还没有找到一种方法来描述可重复原语类型的xml属性;到目前为止,我最好的猜测是:

class联系人(ComplexModel):
“联系人和沟通渠道”
contactName=primitive.Unicode(最小长度=1,最大长度=70,可为零=False)
channel=primitive.Unicode(最大值为unbounded)
channelCode=XmlAttribute(枚举('TELEPHONE'、'TELEFAX'、'EMAIL'、'WEBSITE',键入\'u name='channelCode'),属性\'u'channel')
这将生成一个看起来正确的wsdl(至少对我来说):


但是我不知道如何使用Contact类

>c=Contact()
>>>c.contactName='xxx'
>>>c.channel=['1','2']
>>>#c.channelCode=???
差不多了:)您只需要将channelCode的类型声明放在一个单独的变量中

ChannelCodeType = Enum('TELEPHONE', 'TELEFAX', 'EMAIL', 'WEBSITE',
                                               type_name='channelCode')

class Contact(ComplexModel):
    "contact person and communication channel"
    contactName = primitive.Unicode(min_len=1, max_len=70, nillable=False)
    channel = primitive.Unicode(max_occurs='unbounded')
    channelCode = XmlAttribute(ChannelCodeType, attribute_of='channel')
现在您可以完成适当的作业:

>>> c = Contact()
>>> c.contactName = 'xxx'
>>> c.channel = [ '1', '2' ]
>>> c.channelCode = [ChannelCodeType.TELEPHONE, ChannelCodeType.FAX]
或者只是:

>>> Contact(
...     contactName='xxx',
...     channel=[ '1', '2' ],
...     channelCode=[ChannelCodeType.TELEPHONE, ChannelCodeType.FAX]
... )
另外,虽然我不在“测试是文档的一部分”阵营,但我认为将链接放在相关测试上是合适的,因为这与您的用例直接相关

最后一位:的
属性_将从2.11起被弃用。它不会在2.x系列中删除,但会在3.x中消失。XmlData将取代它,它更容易实现,速度更快。详情见2.11文档