在C#中对包含的XSD进行XML验证

3
使用以下 MSDN 文档,我可以对 XML 文件进行模式验证:http://msdn.microsoft.com/en-us/library/8f0h7att%28v=vs.100%29.aspx 只要 XML 包含对模式位置或内联模式的引用即可。是否可能将模式“硬编码”到应用程序中,即 XSD 不作为文件而是嵌入在应用程序中,因此 XML 不需要引用它?我的意思是像这样的东西:
1. 加载要验证的 XML(无需模式位置)。 2. 将 XSD 加载为资源或其他。 3. 进行验证。
4个回答

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
}

1
您可以使用XmlReaderSettings.Schemas属性来指定要使用的模式。该模式可以从流中加载。
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());
}

0

0
是的,这是可能的。读取嵌入资源文件到字符串,然后创建您的XmlSchemaSet对象并将模式添加到其中。在验证时,使用它在您的XmlReaderSettings中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接