Pourquoi le gestionnaire d’événements XmlDocument Validate n’est-il pas touché?

J’ai ce code:

// 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; } } 

ligne supérieure de mon XSD:

  

Des idées?

J’ai du code validant XML en utilisant cette construction.

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

Je ne pense pas que ce soit la bonne façon de valider; essayez ce lien MSDN . Fondamentalement, le schéma semble aller à la place de 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);