pyxb UnrecognizedDOMRootNodeError [英] pyxb UnrecognizedDOMRootNodeError

查看:186
本文介绍了pyxb UnrecognizedDOMRootNodeError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下xml模式:

<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:complexType name="DataPackage">
    <xsd:sequence>
        <xsd:element name="timestamp" type="xsd:float" default="0.0"/>
        <xsd:element name="type" type="xsd:string" default="None"/>
        <xsd:element name="host" type="xsd:string" default="None"/>
        <xsd:element name="data" type="Data" />
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="Data">
    <xsd:sequence>
        <xsd:element name="item" type="Item" minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="Item">
    <xsd:sequence>
        <xsd:element name="key" type="xsd:string"/>
        <xsd:element name="val" type="xsd:string"/>
    </xsd:sequence>
 </xsd:complexType>

</xsd:schema>

我使用 pyxbgen -u DataPackage.xsd -m DataPackage 生成相应的python类,并使用它们生成以下xml代码:

I used pyxbgen -u DataPackage.xsd -m DataPackage to generate the corresponding python classes and used these to generate the following xml code:

<?xml version="1.0" encoding="utf-8"?>
<DataPackage>
<timestamp>1378970933.29</timestamp>
<type>None</type>
<host>Client 1</host>
<data>
    <item>
        <key>KEY1</key>
        <val>value1</val>
    </item>
</data>
</DataPackage>

如果我尝试使用python解释器中的以下内容阅读:

If i try to read this using the following in python interpreter:

import DataPackage
xml = file("dataPackage-Test.xml").read()
data = DataPackage.CreateFromDocument(xml)

我收到例外:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "DataPackage.py", line 54, in CreateFromDocument
    instance = handler.rootObject()
  File "/usr/local/lib/python2.7/dist-packages/pyxb/binding/saxer.py", line 274, in   rootObject
    raise pyxb.UnrecognizedDOMRootNodeError(self.__rootObject)
pyxb.exceptions_.UnrecognizedDOMRootNodeError: <pyxb.utils.saxdom.Element object at  0x9c7c76c>

任何一个想法是什么问题?

Anyone an idea what's wrong?

推荐答案

您的架构定义了名为DataPackage的顶级复杂类型,但不定义任何顶级元素。因此,DOM元素DataPackage没有PyXB可以用来处理它的相应元素。

Your schema defines a top-level complex type named DataPackage, but does not define any top-level elements. Thus the DOM element DataPackage has no corresponding element that PyXB can use to process it.

您需要添加以下内容:

<element name="DataPackage" type="DataPackage"/>

请注意,在XML Schema中,元素和类型的命名空间是不同的,但在Python中,所以PyXB会重命名其中的一个(在这种情况下是复杂的类型),以避免冲突。请参阅 http://pyxb.sourceforge.net/arch_binding.html?highlight=冲突#deconflicting-name

Note that in XML Schema the namespaces for elements and types are distinct, but in Python they are not, so PyXB will rename one of them (the complex type in this case) to avoid the conflict. See http://pyxb.sourceforge.net/arch_binding.html?highlight=conflict#deconflicting-names

这篇关于pyxb UnrecognizedDOMRootNodeError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆