【发布时间】:2011-01-25 23:02:07
【问题描述】:
我正在用 python 解析一个 XML。我有一个 XSD 架构来验证 XML。我能否获得在 XSD 中定义的 XML 特定节点的类型?
比如我的XML(小部分)是
<deviceDescription>
<wakeupNote>
<lang xml:lang="ru">Русский</lang>
<lang xml:lang="en">English</lang>
</wakeupNote>
</deviceDescription>
我的 XSD 是(又是它的一小部分):
<xsd:element name="deviceDescription" type="zwv:deviceDescription" minOccurs="0"/>
<xsd:complexType name="deviceDescription">
<xsd:sequence>
<xsd:element name="wakeupNote" type="zwv:description" minOccurs="0">
<xsd:unique name="langDescrUnique">
<xsd:selector xpath="zwv:lang"/>
<xsd:field xpath="@xml:lang"/>
</xsd:unique>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="description">
<xsd:sequence>
<xsd:element name="lang" maxOccurs="unbounded">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute ref="xml:lang" use="required"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
在解析过程中,我想知道我的标签 wakeupNote 在 XSD 中定义为 complexType zwv:description。如何做到这一点(在 python 中)?
我需要这个做什么?假设我有很多这样的 XML,我想检查它们是否都有填充英语的字段。很容易检查<lang xml:lang="en"></lang> 是否为空,但允许根本不指定此标记。
所以我们的想法是获取所有可能有语言描述的标签,并检查<lang>标签是否存在并且对于en有非空内容。
更新
由于在验证期间我的 XML 会根据 XSD 检查,因此验证引擎知道所有节点的类型。 7个月前我有一个类似的问题,仍然没有答案。他们是相关的,恕我直言。 Validating and filling default values in XML based on XSD in Python
【问题讨论】:
标签: python xml xsd xsd-validation