pyxb UnrecognizedDOMRootNodeError [英] 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屋!