我正在用 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>
为空,但允许根本不指定此标签。
所以我们的想法是获取所有可能有语言描述的标签,并检查标签是否存在并且是否有en<lang>
的非空内容。
UPD
由于在验证期间我的 XML 是针对 XSD 进行检查的,因此验证引擎知道所有节点的类型。7个月前我有一个类似的问题,仍然没有答案。他们是相关的,恕我直言。在 Python 中基于 XSD 验证和填充 XML 中的默认值