python pyxb UnrecognizedDOMRootNodeError(节点)

2024-05-15 23:39:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从LabVIEW模式创建pyxb模块。使用该模块,我得到一个无法识别的ddomrootnodeError:

Traceback (most recent call last):
File "X:\Projects\LV-PY\Python\LV-PY\pyXB\testXML.py", line 14, in <module>
  fc_return = cluster.CreateFromDOM(doc.documentElement)
File "X:\Projects\LV-PY\Python\LV-PY\pyXB\cluster.py", line 76, in 
 CreateFromDOM
return pyxb.binding.basis.element.AnyCreateFromDOM(node, default_namespace)
File "C:\Python27\lib\site-packages\pyxb\binding\basis.py", line 1743, in 
 AnyCreateFromDOM
return cls.CreateDOMBinding(node, expanded_name.elementBinding(), 
    _fallback_namespace=fallback_namespace)
File "C:\Python27\lib\site-packages\pyxb\binding\basis.py", line 1705, in   
    CreateDOMBinding
raise pyxb.UnrecognizedDOMRootNodeError(node)
   pyxb.exceptions_.UnrecognizedDOMRootNodeError: <pyxb.utils.saxdom.Element
   object at 0x0625F9D0>

因为LabVIEW模式非常庞大,所以我用一个包含字符串的集群做了一个小示例:

<xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:lv="http://www.ni.com/labview" elementFormDefault="qualified"
targetNamespace="http://www.ni.com/labview"
xmlns="http://www.ni.com/labview">

<!--Root element that contains all other data-->
<!--will NOT be produced by primitive-->
<xsd:element name="LVData" type="lv:LVDataRootType"/>
<xsd:complexType name="LVDataRootType">
  <xsd:choice minOccurs="0" maxOccurs="unbounded">
    <xsd:element name="Cluster" type="lv:ClusterType"/>
    <xsd:element name="String" type="lv:StringType"/>
  </xsd:choice>
</xsd:complexType>

<!--Basic elements-->

<xsd:complexType name="StringType">
  <xsd:complexContent>
    <xsd:extension base="lv:LVDataType"/>
   </xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="LVDataType">
    <xsd:sequence>
        <xsd:element name="Name" type="xsd:string" minOccurs="1"/>
        <xsd:element name="Val" type="xsd:string" minOccurs="1"/>
    </xsd:sequence>
</xsd:complexType>

<!--Cluster element-->
<xsd:complexType name="ClusterType">
  <xsd:sequence>  
      <xsd:element name="Name" type="xsd:string"/>
      <xsd:element name="NumElts" type="xsd:unsignedByte"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="String" type="lv:StringType"/>
        </xsd:choice>
   </xsd:sequence>
</xsd:complexType>

</xsd:schema>

然后我从一个简单的LabVIEW集群发送XML输出:

<Cluster>
<Name>clTest</Name>
<NumElts>1</NumElts>
<String>
<Name>sTest</Name>
<Val>foo</Val>
</String>
</Cluster>

我猜这个问题与pabigot的回复有关:a similar question

in XML Schema namespaces for elements and types are distinct, but in Python they are not,

但我不太确定。是否需要在整个LabView架构中更改lv:…Type以使其具有相同的名称和类型?你知道吗

换句话说,而不是:

    <xsd:element name="Cluster" type="lv:ClusterType"/>

我应该:

    <xsd:element name="Cluster" type="Cluster"/>

这将是对LabVIEW模式的一个重大更改,它始终执行这类操作。你知道吗


Tags: nameinpytypeelementfilexsdcluster
1条回答
网友
1楼 · 发布于 2024-05-15 23:39:50

你的文件有两个问题。架构需要顶级元素{http://www.ni.com/labview}LVData,而文档需要顶级元素Cluster。您需要包装文档,并添加命名空间声明。下面的文档不会产生错误。你知道吗

<LVData xmlns="http://www.ni.com/labview">
  <Cluster>
    <Name>clTest</Name>
    <NumElts>1</NumElts>
    <String>
      <Name>sTest</Name>
      <Val>foo</Val>
    </String>
  </Cluster>
</LVData>

相关问题 更多 >