我正在尝试使用主分支的spyne,因为发布的版本与python3不兼容,而且我的模型定义如下:
class currency(ComplexModel):
data = XmlData(Decimal)
class mntCurrency(currency):
code = XmlAttribute(String)
class CreditLmt(ComplexModel):
curr = mntCurrency我已经将这些模型插入到一个简单的HelloWorld服务中,该服务返回响应的CreditLmt。但是,当我试图运行我的soap服务器时,spyne会抱怨如下:
lxml.etree.XMLSchemaParseError:元素‘{http://www.w3.org/2001/XMLSchema}扩展’:内容无效。期望值is (注释?,(组\x{e76f}\选择))?,((属性为attributeGroup)*,anyAttribute?)),第16行
这是正确的,因为spyne生成以下xsd:
<xs:complexType name="mntCurrency">
<xs:complexContent>
<xs:extension base="tns:currency">
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="code" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
<xs:sequence>
<xs:element name="test" type="xs:token" minOccurs="0" nillable="true"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>我之所以使用XmlData,是因为我希望得到这样的响应:
<tns:currency code="826">10.0</tns:currency>那么我该如何定义我的模型呢?
发布于 2019-08-19 10:22:33
生成此元素的示例:
<tns:currency code="826">10.0</tns:currency>..。如下:
from spyne import *
from spyne.util.xml import get_object_as_xml
from lxml import etree
class Currency(ComplexModel):
value = XmlData(Decimal)
code = XmlAttribute(Integer32(values=[826, 234, 555]))
class SomeObject(ComplexModel):
handle = Unicode
currency = Currency
obj = SomeObject(handle="aaaa", currency=Currency(value=D('123.45'), code=555))
elt = get_object_as_xml(obj)
print(etree.tostring(elt, pretty_print=True))至于错误,它直接来自libxml。从本质上说,Xml标准不允许在XmlData子类中单独使用ComplexModel条目。如果认为这是一个错误,则必须向Xml工作组投诉。
https://stackoverflow.com/questions/57546792
复制相似问题