<element>的Pyxb实例没有开始标记</element>的绑定元素

时间:2013-11-08 14:07:56

标签: python xml schema pyxb

我使用模式文件(.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)

一切正常。 那么我做错了什么?

1 个答案:

答案 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上的其他讨论。