Проверка XML с использаванием XSD - C#

Узнай цену своей работы

Формулировка задачи:

Есть код, который успешно проводит XSD-валидацию и даже выводит неплохое описание того, где именно найдена ошибка. Вот он:
public static bool Check(string xsdPath, string xmlPath)
        {
            XSDValidation.result = true; //xml прошла проверку успешно
            XmlReaderSettings booksSettings = new XmlReaderSettings();
            booksSettings.Schemas.Add(null, @xsdPath);
            booksSettings.ValidationType = ValidationType.Schema;
            booksSettings.ValidationEventHandler += new ValidationEventHandler(booksSettingsValidationEventHandler);
 
            //Проверка XML - [url]http://msdn.microsoft.com/ru-ru/library/3740e0b5(v=vs.90[/url])
            XmlReader books = XmlReader.Create(@xmlPath, booksSettings);
 
            try
            {
                while (books.Read()) { } //читает каждую строку
            }
            catch (Exception) //структура xml нарушена(xml вообще не читается)
            {
                XSDValidation.result = false;//xml не прошла проверку (2-я причина)
            }
            return XSDValidation.result;
        }
 
        static void booksSettingsValidationEventHandler(object sender, ValidationEventArgs e)
        {
            if (e.Severity == XmlSeverityType.Warning)
            {
                Console.Write("WARNING: ");
                Console.WriteLine(e.Message);
            }
            else if (e.Severity == XmlSeverityType.Error)
            {
                Console.Write("ERROR: ");
                Console.WriteLine(e.Message);
            }
 
            XSDValidation.result = false;//xml не прошла проверку по причине несоответствия схеме xsd (1-я причина)
        }
Есть ли способ как-то вывести все ошибки, найденные в XML? Т.е. Console.WriteLine(e.Message) показывает мне оисание первой ошибки, а вот дальше проверка не идет. Можно ли как-то "перешагнуть" этот ошибочный аттрибут(блок, кусок) в обоих файлах и продолжить проверку, получив описание по всем проблемным полям сразу?

Решение задачи: «Проверка XML с использаванием XSD»

textual
Листинг программы
while (books.EndOfFile)     // псеводкод, "пока не упрется в конец"
{
try
            {
                books.Read() { } //читает каждую строку
            }
            catch (Exception) //структура xml нарушена(xml вообще не читается)
            {
                XSDValidation.result = false;//xml не прошла проверку (2-я причина)
            }
            
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5