lxmlでxmlの検証に問題が発生しました。 XSDスキーマとXMLファイルはどちらもAmazonのドキュメントにあるため、互換性があります。しかし、XML自体は、ロードされていない別のスキーマを指しています。ここで lxmlは、インラインスキーマもロードしている間に、XSDファイルに対していくつかのXMLを検証する方法を教えてください。
は lxml validation tutorialに基づいており、私のコードです:xsd_doc = etree.parse('ProductImage.xsd')
xsd = etree.XMLSchema(xsd_doc)
xml = etree.parse('ProductImage_sample.xml')
xsd.validate(xml)
print xsd.error_log
「ProductImage_sample.xml:2:0:ERROR:SCHEMASV:SCHEMAV_CVC_ELT_1:要素 'AmazonEnvelope' のために利用可能なマッチンググローバル宣言検証ルート。
ProductImage.xsdの代わりにamzn-envelope.xsdを検証するとエラーは表示されませんが、指定されたImageフィードが有効かどうかはわかりません。すべてのxsd & xmlファイルは私のpythonスクリプトと一緒に作業ディレクトリにあります。ここで
は間違いなく有効である必要がありサンプルXMLの抜粋である:ここで
<?xml version="1.0"?>
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
<Header>
<DocumentVersion>1.01</DocumentVersion>
<MerchantIdentifier>Q_M_STORE_123</MerchantIdentifier>
</Header>
<MessageType>ProductImage</MessageType>
<Message>
<MessageID>1</MessageID>
<OperationType>Update</OperationType>
<ProductImage>
<SKU>1234</SKU>
は、スキーマの抜粋である(このファイルはパブリックではありませんので、私はそれのすべてを表示することはできません)。
<?xml version="1.0"?>
<!-- Revision="$Revision: #5 $" -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:include schemaLocation="amzn-base.xsd"/>
<xsd:element name="ProductImage">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="SKU"/>
私がすることが含まAMZN-base.xsdを以下はAmazonEnvelope
タグの定義に達するまで終わらないと言うことができます。だから私の質問は:lxml <AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
のようなタグを介してスキーマを読み込むことができます。それ以外の場合は、どうすればイメージフィードを検証できますか? 、その後、一般的には
<xsd:include schemaLocation="ProductImage.xsd"/>
lxmlの:
lxml doesn 'スキーマの位置を扱うxsi属性を扱う。私が関連付けることができないのは、サンプルXMLのどのノードがXSDのProductImage要素定義と一致するかです。言い換えれば、サンプルXMLのどこかに というタグが付いていますか? –
はい、見ることができ、インデントが意味するように、タグがあります。このタグは、SKUで始まるいくつかのサブ要素を含むと終了します。 –
SchemaLocation = "amzn-envelope.xsd"は、実際には、ProductImage.xsdを含むすべてのサブスキーマにインクルードされていることがわかったので、そのファイルで検証するためのヒントです。 –