我正在尝试针对现有的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作为输入,因此不使用阅读器。
答案 0 :(得分:1)
这正是XmlDocument.Validate方法的预期行为。一旦找到验证错误,它就会停止验证进程并返回错误。因此,用户必须修复该错误并再次进行验证。
此行为与Visual Studio错误列表不同。例如,如果代码中只有一个语法错误,则有时会返回100个错误。但实际上你必须在一个地方只修一个。因此,利弊取决于具体情况。但是,我认为您不能轻易获得XMLDocument的所有验证错误,它本身就以不同的方式工作。