ValidationEventHandler запускается только один раз?

#c# #.net

#c# #.net

Вопрос:

У меня есть XML-файл, в котором есть 2 ошибки XSD. Но ValidationEventHandler срабатывает только один раз и показывает мне вторую ошибку только тогда, когда я исправляю первую ошибку. это мой код:

        public static void ValidateXml(string xml, string xsd)
    {
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ValidationEventHandler  = settings_ValidationEventHandler;
        settings.ValidationType = ValidationType.Schema;
        settings.Schemas.Add(null, XmlReader.Create(xsd));
        if (settings.Schemas.Count > 0)
        {
            using (XmlReader reader = XmlReader.Create(xml, settings))
            {
                while (reader.Read())
                {
                }                    
            }
        }
    }

    private static void settings_ValidationEventHandler(object sender,
                                    ValidationEventArgs e)
    {
        Console.WriteLine("Validation Error Message: {0}", e.Message);
        Console.WriteLine("Validation Error Severity: {0}", e.Severity);
        if (e.Exception != null)
        {
            Console.WriteLine("Validation Error Line Number: {0}",
                    e.Exception.LineNumber);
            Console.WriteLine("Validation Error Line Position: {0}",
                    e.Exception.LinePosition);               
        }
    }
 

Ответ №1:

Я не совсем понимаю вашу проблему. Если вы хотите, чтобы ваш XML был правильным, это не имеет значения, имеет ли он 1 ошибку или 2. Ваш код сообщает вам, что XML неверен.

Кроме того, я полагаю, что XmlReader не будет (возможно, даже не сможет) продолжать чтение, если обнаружит ошибку.

Комментарии:

1. XmlReader продолжает чтение текущего документа до конца, но игнорирует пропущенные элементы. Я должен сгенерировать отчет, в котором будут показаны все ошибки в документе.

2. Может быть, вы можете попробовать метод проверки