私はPythonでXMLを解析しています。 XMLを検証するためのXSDスキーマがあります。 XSDで定義されているXMLの特定のノードのタイプを取得できますか?XSDで定義されているXMLノードのタイプを取得することは可能ですか?
例えば、私のXML(小部分)が(再び、それのほんの一部)私のXSDがある
<deviceDescription>
<wakeupNote>
<lang xml:lang="ru">Русский</lang>
<lang xml:lang="en">English</lang>
</wakeupNote>
</deviceDescription>
です:
<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>
解析中に私がいることを知りたい私タグウェイクアップノートはXSDでcomplexType zwv:descriptionと定義されています。どのようにこれを行う(Pythonで)?
これは何のために必要なのですか?私がこれらのXMLをたくさん持っていて、それらのすべてに英語のフィールドがあることを確認したいと考えています。 <lang xml:lang="en"></lang>
が空であることを確認するのは簡単ですが、このタグをまったく指定しないことができます。
考えられるのは、言語の説明を持つ可能性があるすべてのタグを取得し、との空でないコンテンツがあることを確認することです。検証中に私のXMLは、XSDに照らしてチェックされているので
UPD
は、検証エンジンは、すべてのノードの種類を知っています。私は7ヶ月前に同様の質問をしましたが、まだ答えはありません。彼らは関連している、イホ。 Validating and filling default values in XML based on XSD in Python
XSDで定義されているすべてのXMLノードを 'zwv:description'として見つけたいと思います。例えば、私のXSDでは 'wakeupNote'を' zwv:description'の 'inside deviceDescription'と' zwv:shortdescription'という別のタグの中に定義して定義することができます。私のXMLには2種類の 'wakeupNote'があります。そして、 'zwv:description'型のものだけを選択する必要があります。どうやってするの? – PoltoS
編集があなたの必要を満たさない場合は、コメントを追加してください。質問と回答を明確にする機会を与えずに投票をしないでください。 –
これについてもっと考えると、良い推薦をするためにユースケースを理解する必要が増えます。どのようにXMLを解析していますか?スキーマはどのくらいの頻度で変更されますか? XSDはあなたのものか他の人ですか?それが相手方であれば、なぜあなたは追加の検証を課したいのですか? –