Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据C中嵌入的XSD验证XML#_C#_Xml_Validation_Xsd - Fatal编程技术网

C# 根据C中嵌入的XSD验证XML#

C# 根据C中嵌入的XSD验证XML#,c#,xml,validation,xsd,C#,Xml,Validation,Xsd,我使用以下MSDN文档根据架构验证XML文件: 只要XML包含对模式位置或内联模式的引用,这就可以正常工作。是否可以将模式“硬编码”嵌入到应用程序中,即XSD不会作为文件驻留,因此XML不需要引用它 我说的是: 加载要验证的XML(不带架构位置) 将XSD作为资源或任何东西加载 进行验证 试试这个: Stream objStream = objFile.PostedFile.InputStream; // Open XML file XmlTextReader xtrFile = new Xm

我使用以下MSDN文档根据架构验证XML文件:

只要XML包含对模式位置或内联模式的引用,这就可以正常工作。是否可以将模式“硬编码”嵌入到应用程序中,即XSD不会作为文件驻留,因此XML不需要引用它

我说的是:

  • 加载要验证的XML(不带架构位置)
  • 将XSD作为资源或任何东西加载
  • 进行验证
  • 试试这个:

    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
    }
    

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

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

    您可以使用该属性指定要使用的架构。可以从流中加载架构

    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());
    }