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

时间:2011-09-19 02:45:39

标签: c# .net 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);
    }
}

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

1 个答案:

答案 0 :(得分:1)

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

此行为与Visual Studio错误列表不同。例如,如果代码中只有一个语法错误,则有时会返回100个错误。但实际上你必须在一个地方只修一个。因此,利弊取决于具体情况。但是,我认为您不能轻易获得XMLDocument的所有验证错误,它本身就以不同的方式工作。