PythonでXMLを解析しています。XML を検証するための XSD スキーマがあります。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 のデフォルト値の検証と入力