我使用模式文件(.xsd)生成用于生成xml代码的python类。 我可以使用所有生成的calsses,但如果我尝试
则会出错print d.toxml("utf-8")
File "/usr/local/lib/python2.7/dist-packages/pyxb/binding/basis.py", line 541, in toxml
dom = self.toDOM(bds)
File "/usr/local/lib/python2.7/dist-packages/pyxb/binding/basis.py", line 513, in toDOM
raise pyxb.UnboundElementError(self)
pyxb.exceptions_.UnboundElementError: Instance of type visionDataPackage has no bound element for start tag
事实证明,该元素的element_name属性缺失。所以,如果我在/usr/local/lib/python2.7/dist-packages/pyxb/binding/basis.py中设置了element_name:
element_name="visionDataPackage"
if (element_name is None) and (self._element() is not None):
element_binding = self._element()
element_name = element_binding.name()
need_xsi_type = need_xsi_type or element_binding.typeDefinition()._RequireXSIType(type(self))
if element_name is None:
raise pyxb.UnboundElementError(self)
一切正常。 那么我做错了什么?
答案 0 :(得分:3)
您正在做的是使用其类型而不是元素创建d
。例如,如果您的架构有:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="atype">
<xs:sequence>
<xs:element name="entry" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="anelt" type="atype"/>
</xs:schema>
你要做d = atype()
然后d
不会绑定任何元素。如果您改为使用d = anelt()
,则d
仍然是atype
的实例,但它将绑定到anelt
。正是该绑定告诉PyXB从对象生成DOM或文本XML表示时要使用哪个元素标记。
当对象未绑定到元素时,PyXB以前分配了从底层类型推断出的默认元素标签是在PyXB 1.2.3中发现并修复的long-standing bug。
请参阅PyXB SF discussion forum上的其他讨论。