3

我使用模式文件 (.xsd) 来生成用于生成 xml 代码的 python 类。我可以使用所有生成的类,但如果我尝试使用会出现错误

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)

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

4

1 回答 1

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(), thend仍然是 的实例atype,但它会被绑定到anelt. 正是这种绑定告诉 PyXB 在从对象生成 DOM 或文本 XML 表示时使用什么元素标记。

当对象未绑定到元素时,PyXB 以前分配了一个从底层类型推断的默认元素标签,这是在 PyXB 1.2.3 中发现并修复的一个长期存在的错误。

请参阅PyXB SF 讨论论坛上的其他讨论。

于 2013-12-04T13:17:09.657 回答