在Python中解析.xsd

2024-05-22

我需要在 Python 中解析文件 .xsd,就像解析 XML 一样。
我正在使用 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:)

谢谢, 斯特


如果您必须处理 xsd 文件,也许还使用它们来验证 xml 文件,我建议您传递给lxml http://lxml.de/validation.html#xmlschema对 XMLSchema 文件有很好的支持。

示例代码:

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>]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Python中解析.xsd 的相关文章

随机推荐