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ます。オブジェクトからDOMまたはテキストXML表現を生成するときに使用する要素タグをPyXBに伝えるのは、そのバインディングです。

PyXB は以前、オブジェクトが要素にバインドされていない場合に、基になる型から推測されたデフォルトの要素タグを割り当てていましたが、長年のバグであり、PyXB 1.2.3 で発見され、修正されました。

PyXB SF ディスカッション フォーラムで追加のディスカッションを参照してください。

于 2013-12-04T13:17:09.657 に答える