Ste*_*ano 5 python xml parsing xsd
我需要在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>
Run Code Online (Sandbox Code Playgroud)
当我访问
doc.xpathEval('//xs:complexType/xs:sequence/xs:element[@name="IeplcHeader"]'):
Run Code Online (Sandbox Code Playgroud)
告诉我,找不到路径.
如果我删除所有的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>
Run Code Online (Sandbox Code Playgroud)
以这种方式它的工作原理
doc.xpathEval('//complexType/sequence/element[@name="IeplcHeader"]'):
Run Code Online (Sandbox Code Playgroud)
有谁知道我怎么能读到修复前缀这个问题?现在我正在准备删除xs的文件:但这是一个糟糕的解决方案,我真的希望能够找到更好的解决方案.
(我没有尝试使用py-dom-xpath,我不知道是否可以使用xs :)
谢谢,ste
如果你必须处理xsd文件,也许还使用它们来验证xml文件,我建议你传递给lxml,它对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"})
Run Code Online (Sandbox Code Playgroud)
结果是:
[<Element {http://www.w3.org/2001/XMLSchema}element at 0x9a17f2c>]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12324 次 |
最近记录: |