在python中解析.xsd

2024-04-28 17:11:30 发布

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

我需要像解析XML一样解析Python中的file.xsd。
我正在使用libxml2。
我必须解析如下所示的xsd:

<xs:complexType name="ClassType">
<xs:sequence>
    <xs:element name="IeplcHeader">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="device-number" type="xs:integer" fixed="1"/>
            </xs:sequence>
            <xs:attribute name="version" type="xs:integer" use="required" fixed="0"/>
        </xs:complexType>
    </xs:element>

当我使用

doc.xpathEval('//xs:complexType/xs:sequence/xs:element[@name="IeplcHeader"]'):

告诉我找不到路。

如果我删除所有xs:

<complexType name="ClassType">
  <sequence>
    <element name="IeplcHeader">
        <complexType>
            <sequence>
                <element name="device-number" type="xs:integer" fixed="1"/>
            </sequence>
            <attribute name="version" type="xs:integer" use="required" fixed="0"/>
        </complexType>
    </element>

这样就行了

doc.xpathEval('//complexType/sequence/element[@name="IeplcHeader"]'):

有人知道我怎么才能知道修复前缀的问题吗?现在我正在准备删除xs:的文件,但这是一个可行的解决方案,我真的希望能够找到更好的解决方案。

(我还没有尝试使用py dom xpath,我不知道是否可以使用xs:)

谢谢, ste公司


Tags: namenumberversiondevicetypeattributeintegerelement
1条回答
网友
1楼 · 发布于 2024-04-28 17:11:30

如果您必须处理xsd文件,也可以使用它们来验证xml文件,我建议您传递给对XMLSchema文件有良好支持的lxml

示例代码:

from lxml import etree
from cStringIO import StringIO

f = StringIO()

f = StringIO('''\
 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <xsd:element name="a" type="AType"/>
 <xsd:complexType name="AType">
   <xsd:sequence>
     <xsd:element name="b" type="xsd:string" />
   </xsd:sequence>
 </xsd:complexType>
 </xsd:schema>
''')    

xmlschema_doc = etree.parse(f)

xmlschema_doc.xpath('xsd:element',
    namespaces={"xsd": "http://www.w3.org/2001/XMLSchema"})

结果:

[<Element {http://www.w3.org/2001/XMLSchema}element at 0x9a17f2c>]

相关问题 更多 >