XmlDocument.Validate 不会因多个错误而触发

har*_*2ms 5 .net c# xml xmldocument xml-validation

我正在尝试针对现有的 XmlSchemaSet 验证传入的输入 xmlDocument。以下是代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

从验证的角度来看,代码运行良好。但是 errorList 仅捕获第一个节点错误。它不会捕获其他节点错误。看起来该事件仅被触发一次。如何做到这一点,请帮助。请注意,我将 xmldocument 作为输入,因此没有使用阅读器。

Cha*_*thJ 2

这正是XmlDocument.Validate方法的预期行为。一旦发现验证错误,它就会停止验证过程并返回错误。因此,用户必须修复该错误并再次验证。

此行为与 Visual Studio 错误列表不同。例如,如果代码中有一个语法错误,有时它会返回数百个错误。但实际上你只需在一处修复一个即可。所以,有利有弊,视情况而定。但是,我认为您无法轻松获得 XMLDocument 的所有验证错误,它本质上以不同的方式工作。