Я пытаюсь проверить документ XML по схеме (которая встроена в мою программу как ресурс). Я получил все, чтобы работать, поэтому я попытался проверить на наличие ошибок, добавив второй узел-брат в XML в месте, где схема указывает maxOccurs="1"
. Проблема в том, что мой ValidationEventHandler
никогда не вызывается, также XmlDocument.Load()
выдает исключение XmlSchemaValidationException
, когда я ожидал, что XmlDocument.Validate()
сделает это.
Это код, который у меня есть:
private void ValidateUserData( string xmlPath )
{
var resInfo = Application.GetResourceStream( new Uri( @"MySchema.xsd",
UriKind.Relative ) );
var schema = XmlSchema.Read( resInfo.Stream, SchemaValidationCallBack );
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add( schema );
schemaSet.ValidationEventHandler += SchemaValidationCallBack;
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas = schemaSet;
settings.ValidationType = ValidationType.Schema;
XmlDocument doc = new XmlDocument();
using( XmlReader reader = XmlReader.Create( xmlPath, settings ) ) {
doc.Load( reader ); // <-- This line throws an exception if XML is ill-formed
reader.Close();
}
doc.Validate( SchemaValidationCallBack );// <-- This is never reached
}
private void SchemaValidationCallBack( object sender, ValidationEventArgs e )
{
Console.WriteLine( "SchemaValidationCallBack: " + e.Message );
}
Как мне вызвать обратный вызов, чтобы я мог обрабатывать ошибки проверки?
Спасибо за вашу помощь!