XmlDocument.Validate не срабатывает при множественных ошибках - PullRequest
3 голосов
/ 19 сентября 2011

Я пытаюсь проверить входящий входной xmlDocument с существующим XmlSchemaSet.Ниже приведен код:

public class ValidateSchemas
{
    private bool _isValid = true;

    public List<string> errorList = new List<string>();

    public bool ValidateDocument(XmlDocument businessDocument)
    {
       XmlSchemaSet schemaSet = SchemaLoader.Loader();
       bool isValid = Validate(businessDocument, SchemaLoader._schemaSet);
       return isValid;
    }

    public bool Validate(XmlDocument document, XmlSchemaSet schema)
    {
        ValidationEventHandler eventHandler = new ValidationEventHandler(HandleValidationError);
            document.Schemas = schema;
            document.Validate(eventHandler);
            return _isValid;
    }

    private  void HandleValidationError(object sender, ValidationEventArgs ve)
    {
        _isValid = false;   errorList.Add(ve.Message);
    }
}

Код работает нормально с точки зрения проверки.Однако errorList фиксирует только ошибку первого узла.Он не фиксирует ошибки других узлов.Похоже, мероприятие начинается только один раз.Как это сделать, пожалуйста, помогите.Обратите внимание, что я получаю xmldocument в качестве входных данных, поэтому я не использую ридер.

1 Ответ

1 голос
/ 19 сентября 2011

Это точно ожидаемое поведение метода XmlDocument.Validate . Как только он находит ошибку проверки, он останавливает процесс проверки и возвращает ошибку. Таким образом, пользователь должен исправить эту ошибку и подтвердить снова.

Это поведение отличается от списка ошибок Visual Studio. Например, если у вас есть одна синтаксическая ошибка в коде, иногда он возвращает сотни ошибок. Но на самом деле вы должны исправить только один в одном месте. Так что тут могут быть как плюсы, так и минусы в зависимости от обстоятельств. Тем не менее, я не думаю, что вы могли бы легко получить все ошибки проверки для XMLDocument, по сути, он работает по-другому.

...