【问题标题】:Pyxb Instance of <element> has no bound element for start tag<element> 的 Pyxb 实例没有开始标记的绑定元素
【发布时间】:2013-11-08 14:07:55
【问题描述】:

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

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

【问题讨论】:

    标签: python xml schema pyxb


    【解决方案1】:

    您可能正在做的是使用其类型而不是元素创建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 上的更多讨论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多