首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyxb UnrecognizedDOMRootNodeError

pyxb UnrecognizedDOMRootNodeError
EN

Stack Overflow用户
提问于 2013-09-12 15:36:55
回答 1查看 785关注 0票数 0

我得到了以下xml模式:

代码语言:javascript
复制
<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代码:

代码语言:javascript
复制
<?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解释器中使用以下命令来读取此内容:

代码语言:javascript
复制
import DataPackage
xml = file("dataPackage-Test.xml").read()
data = DataPackage.CreateFromDocument(xml)

我得到了一个例外:

代码语言:javascript
复制
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>

有人知道是怎么回事吗?

EN

回答 1

Stack Overflow用户

发布于 2013-09-26 03:26:57

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

您需要添加如下内容:

代码语言:javascript
复制
<element name="DataPackage" type="DataPackage"/>

请注意,在XML Schema中,元素和类型的名称空间是不同的,但在Python中却不是,因此PyXB将重命名其中的一个(本例中的复杂类型)以避免冲突。请参阅http://pyxb.sourceforge.net/arch_binding.html?highlight=conflict#deconflicting-names

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18758240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档