2013-06-18 74 views
3

嵌入式XSD的XML使用下面的MSDN文檔我驗證XML文件對一個模式:http://msdn.microsoft.com/en-us/library/8f0h7att%28v=vs.100%29.aspx驗證針對C#

這工作得很好,只要XML包含模式位置或聯架構參考。是否有可能將「硬編碼」模式嵌入到應用程序中,即XSD不會作爲文件駐留,因此XML不需要引用它?

我說的是一樣的東西:

  1. 加載XML進行驗證(無架構位置)。
  2. 加載XSD作爲資源或其他。
  3. 做驗證。

回答

3

試試這個:

Stream objStream = objFile.PostedFile.InputStream; 

// Open XML file 
XmlTextReader xtrFile = new XmlTextReader(objStream); 

// Create validator 
XmlValidatingReader xvrValidator = new XmlValidatingReader(xtrFile); 
xvrValidator.ValidationType = ValidationType.Schema; 

// Add XSD to validator 
XmlSchemaCollection xscSchema = new XmlSchemaCollection(); 
xscSchema.Add("xxxxx", Server.MapPath(@"/zzz/XSD/yyyyy.xsd")); 
xvrValidator.Schemas.Add(xscSchema); 

try 
{ 
    while (xvrValidator.Read()) 
    { 
    } 
} 
catch (Exception ex) 
{ 
    // Error on validation 
} 
0

是的,這是可能的。讀取嵌入的資源文件到string,然後創建您的XmlSchemaSet對象添加架構。驗證時,請在​​中使用它。

1

您可以使用XmlReaderSettings.Schemas屬性來指定要使用的模式。模式可以從Stream加載。

var schemaSet = new XmlSchemaSet(); 
schemaSet.Add("http://www.contoso.com/books", new XmlTextReader(xsdStream)); 

var settings = new XmlReaderSettings(); 
settings.Schemas = schemaSet; 

using (var reader = XmlReader.Create(xmlStream, settings)) 
{ 
    while (reader.Read()); 
}