有一個奇怪的問題,希望有人能夠闡明一些。我試圖使用amzn-envelope.xsd驗證Amazon XML Feed請求,但是遇到了架構問題,因爲amzn-envelope.xsd通過包含的架構包含對amzn-base.xsd的多個引用。亞馬遜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;
}
我碰到下面的錯誤;
The complexType 'NoiseLevelDimension' has already been declared.
通過觀察模式,我可以看到amzn-base.xsd是通過其它包括架構包含不止一次這就是爲什麼驗證失敗,問題是我不知道如何解決它。
有沒有人遇到類似的東西?
我很高興,如果它有幫助,但如果你認爲我的答案的底線是這個模式「不應該失敗驗證」,你誤解了它(除非你在技術意義上使用* should * 「這將是一個好主意,但它不是強制性的」)。你面臨的問題是一致性驗證器*沒有義務接受該模式。 –