amzn -envelope.xsdを使用して Amazon XML フィード リクエストを検証しようとしていますが、スキーマに問題があります。
XML フィードの例を次に示します。
<AmazonEnvelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
<Header>
<DocumentVersion>1.01</DocumentVersion>
<MerchantIdentifier>A38Z13EKY7MB4Y</MerchantIdentifier>
</Header>
<MessageType>OrderFulfillment</MessageType>
<Message>
<MessageID>1</MessageID>
<OrderFulfillment>
<AmazonOrderID></AmazonOrderID>
<MerchantFulfillmentID>2148031177</MerchantFulfillmentID>
<FulfillmentDate>2013-06-25T09:54:22Z</FulfillmentDate>
<FulfillmentData>
<CarrierName>UKMail Business Class</CarrierName>
<ShippingMethod>CU - Next Day</ShippingMethod>
<ShipperTrackingNumber>30995140015293</ShipperTrackingNumber>
</FulfillmentData>
</OrderFulfillment>
</Message>
</AmazonEnvelope>
以下のようなコードを使用して検証する場合:
SchemaAmazonEnvelopeURL = "https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_1_9/amzn-envelope.xsd";
XDocument xdoc = XDocument.Parse(xml_data);
bool success = false;
try
{
success = Validate(xdoc, SchemaAmazonEnvelopeURL);
}
catch (Exception ex)
{
log.Error("Failed to validate against AWS Schema\n\n" + ex.Message);
}
Assert.IsTrue(success, "Failed validation");
public bool Validate(XDocument xDocument, string xsdSchema)
{
bool success = true;
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("", xsdSchema);
// Validate
xDocument.Validate(schemas, (o, e) =>
{
throw e.Exception;
});
return success;
}
次のエラーが表示されます。
complexType 'NoiseLevelDimension' は既に宣言されています。
スキーマを見ると、amzn-base.xsdが他の含まれているスキーマを介して複数回含まれていることがわかります。これが、検証が失敗している理由です。
どうすればこの問題を回避できますか?