嵌入式XSD的XML使用下面的MSDN文檔我驗證XML文件對一個模式:http://msdn.microsoft.com/en-us/library/8f0h7att%28v=vs.100%29.aspx驗證針對C#
這工作得很好,只要XML包含模式位置或聯架構參考。是否有可能將「硬編碼」模式嵌入到應用程序中,即XSD不會作爲文件駐留,因此XML不需要引用它?
我說的是一樣的東西:
- 加載XML進行驗證(無架構位置)。
- 加載XSD作爲資源或其他。
- 做驗證。
嵌入式XSD的XML使用下面的MSDN文檔我驗證XML文件對一個模式:http://msdn.microsoft.com/en-us/library/8f0h7att%28v=vs.100%29.aspx驗證針對C#
這工作得很好,只要XML包含模式位置或聯架構參考。是否有可能將「硬編碼」模式嵌入到應用程序中,即XSD不會作爲文件駐留,因此XML不需要引用它?
我說的是一樣的東西:
試試這個:
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
}
這篇文章中描述你可以通過GetManifestResourceStream聲明XSD作爲嵌入資源並加載它:How to read embedded resource text file
是的,這是可能的。讀取嵌入的資源文件到string
,然後創建您的XmlSchemaSet
對象添加架構。驗證時,請在中使用它。
您可以使用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());
}