解決
<xs:import>
元素中指定。我以爲它可能是一個訪問問題,所以我將外部文檔的一個副本移動到本地主機文件夾。我得到了同樣的錯誤,所以現在我想知道是否使用
<xs:import>
元素可能會出現某種問題。
模式文檔片段看起來是這樣的:
<xs:schema targetNamespace="http://www.smpte-ra.org/schemas/429-7/2006/CPL" xmlns:cpl="http://www.smpte-ra.org/schemas/429-7/2006/CPL" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
...
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://localhost/TMSWebServices/XMLSchema/xmldsig-core-schema.xsd"/>
...
<xs:element name="Signer" type="ds:KeyInfoType" minOccurs="0"/>
...
</xs:schema>
我試圖與運行該代碼是真正的簡單
string XSDFILEPATH = @"http://localhost/TMSWebServices/XMLSchema/CPL.xsd";
string XMLFILEPATH = @"C:\foo\bar\files\TestCPLs\CPL_930f5e92-be03-440c-a2ff-a13f3f16e1d6.xml";
System.Xml.XmlReaderSettings settings = new System.Xml.XmlReaderSettings();
settings.Schemas.Add(null, XSDFILEPATH);
settings.ValidationType = System.Xml.ValidationType.Schema;
System.Xml.XmlDocument document = new System.Xml.XmlDocument();
document.Load(XMLFILEPATH);
System.Xml.XmlReader rdr = System.Xml.XmlReader.Create(new StringReader(document.InnerXml), settings);
while (rdr.Read())
{
}
一切順利,直到(從http://dotnetslackers.com/Community/blogs/haissam/archive/2008/11/06/validate-xml-against-xsd-xml-schema-using-c.aspx得到它)該行在while循環之前實例化XMLReader對象。然後它失敗,類型沒有聲明錯誤。它試圖找到的類型KeyInfoType在import元素的其中一個文檔中定義。我確定命名空間是一致的。我想知道命名空間定義中的#號是否引起問題,但刪除它們沒有效果,它只是改變了錯誤的樣子(即「類型'http://www.w3.org/2000/09/xmldsig:KeyInfoType'未聲明。」與「類型'http://www.w3.org/2000/09/xmldsig#:KeyInfoType'不是聲明。「)
我懷疑是有一些關於<xs:import>
元素我缺少的處理。任何建議都非常受歡迎。謝謝!
我試過這一行,但沒有任何效果。我看着ProcessSchemaLocation標誌,發現的例子,我已經看到了使用複合運算符(新的我): settings.ValidationFlags | = System.Xml.Schema.XmlSchemaValidationFlags.ProcessSchemaLocation; 不幸的是,也沒有工作。我想,我會繼續阻止它。謝謝! – BobC 2009-05-01 21:27:41