XmlDocument.Load () создает исключение XmlSchemaValidationException - PullRequest
1 голос
/ 18 января 2011

Я пытаюсь проверить документ 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 );
}

Как мне вызвать обратный вызов, чтобы я мог обрабатывать ошибки проверки?

Спасибо за вашу помощь!

1 Ответ

3 голосов
/ 18 января 2011

Вы должны обработать enve ValidationEventHandler класса XmlReaderSettings.

Событие XmlSchemaSet.ValidationEventHandler будет запущено, если ваш файл XSD недействителен.

Событие XmlReaderSettings.ValidationEventHandler будет запущено, если ваш XML нарушает ваш XSD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...