在C#中针对嵌入式XSDvalidationXML

使用以下MSDN文档,我针对模式validationXML文件: http : //msdn.microsoft.com/en-us/library/8f0h7att%28v=vs.100%29.aspx

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

我说的是:

  1. 加载要validation的XML(没有架构位置)。
  2. 将XSD加载为资源或其他任何内容。
  3. 做validation。

试试这个:

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 } 

您可以使用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()); } 

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

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