为什么XmlDocument Validate事件处理程序没有被命中?

我有这个代码:

// Load the document XmlDocument xmlDocument = new XmlDocument(); // use the stream and have it close when it is finished using ( argInputStream ) { xmlDocument.Load( argInputStream ); xmlDocument.Schemas.Add( XmlSchema.Read( argSchemaStream, null ) ); xmlDocument.Validate( ValidationEventHandler ); } // this is not getting hit void ValidationEventHandler( object sender, ValidationEventArgs e ) { switch ( e.Severity ) { case XmlSeverityType.Error: Console.WriteLine( "Error: {0}", e.Message ); break; case XmlSeverityType.Warning: Console.WriteLine( "Warning {0}", e.Message ); break; } } 

我的XSD的顶线:

  

有任何想法吗?

我有一些使用这种结构validationxml的代码。

 var schemaReader = new XmlTextReader(argSchemaStream); var schema = new XmlSchemaSet(); schema.Add(null, schemaReader); var settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.Schemas.Add(schema); settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings; settings.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler); var doc = new XmlDocument(); doc.Load(XmlReader.Create(argInputStream, settings)); 

我不认为这是正确的validation方式; 试试这个MSDN链接 。 基本上,模式似乎与XmlReaderSettings一起使用。

 XmlReaderSettings settings = new XmlReaderSettings(); settings.Schemas.Add(...); settings.ValidationType = ValidationType.Schema; XmlReader reader = XmlReader.Create(..., settings); XmlDocument document = new XmlDocument(); document.Load(reader); document.Validate(eventHandler);