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

4 回答 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
}
于 2013-06-18T10:54:53.017 回答
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());
}
于 2013-06-18T11:00:15.323 回答
0

是的,这是可能的。读取嵌入的资源文件string,然后创建您的XmlSchemaSet对象,将架构添加到其中。XmlReaderSettings在验证时使用它。

于 2013-06-18T10:59:51.450 回答
0

您可以将 XSD 声明为嵌入式资源并通过 GetManifestResourceStream 加载它,如本文所述:如何读取嵌入式资源文本文件

于 2013-06-18T10:57:09.947 回答