Экземпляр Pyxb <element> не имеет связанного элемента для начального тега

Я использовал файл схемы (.xsd) для генерации классов Python для генерации xml-кода. Я могу использовать все сгенерированные 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="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 ответ

Вероятно, то, что вы делаете, создает 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.

Смотрите дополнительную дискуссию на дискуссионном форуме PyXB SF.

Другие вопросы по тегам