Проверка XML с использаванием XSD - C#
Формулировка задачи:
Есть код, который успешно проводит XSD-валидацию и даже выводит неплохое описание того, где именно найдена ошибка. Вот он:
Есть ли способ как-то вывести все ошибки, найденные в XML? Т.е. Console.WriteLine(e.Message) показывает мне оисание первой ошибки, а вот дальше проверка не идет. Можно ли как-то "перешагнуть" этот ошибочный аттрибут(блок, кусок) в обоих файлах и продолжить проверку, получив описание по всем проблемным полям сразу?
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 с использаванием XSD»
textual
Листинг программы
while (books.EndOfFile) // псеводкод, "пока не упрется в конец"
{
try
{
books.Read() { } //читает каждую строку
}
catch (Exception) //структура xml нарушена(xml вообще не читается)
{
XSDValidation.result = false;//xml не прошла проверку (2-я причина)
}
}