Python 无界基元类型的XmlAttribute
我还没有找到一种方法来描述可重复原语类型的xml属性;到目前为止,我最好的猜测是: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
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文档