如何知道哪个xml文件未通过验证
本文关键字:验证 文件 xml 何知道 | 更新日期: 2023-09-27 18:23:52
我有以下代码来验证我的xml:
private bool ValidateXML(string filePath)
{
try
{
XmlDocument xmld = new XmlDocument();
xmld.Load(filePath);
xmld.Schemas.Add(null, @"C:'...'....xsd");
xmld.Validate(ValidationEventHandler);
return true;
}
catch
{
return false;
}
}
static void ValidationEventHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Debug.WriteLine("Error: {0}", e.Message);
break;
case XmlSeverityType.Warning:
Debug.WriteLine("Warning {0}", e.Message);
break;
}
}
但是,当我在回调中时,我如何知道失败文件的filePath?我想把它移到"失败"文件夹,但不知道是哪一个,我做不到。
如果失败,可以返回文件路径,如果通过,可以返回空字符串,而不是返回bool。或者类似的东西。
您可以使用匿名方法,这样您的"file"变量就可以被"捕获",这样您就可以在ValidationEvent
回调中使用它。
public static bool ValidateXmlFile1(string filePath, XmlSchemaSet set)
{
bool bValidated = true;
try
{
XmlDocument tmpDoc = new XmlDocument();
tmpDoc.Load(filePath);
tmpDoc.Schemas = set;
ValidationEventHandler eventHandler = new ValidationEventHandler(
(Object sender, ValidationEventArgs e) =>
{
switch (e.Severity)
{
case XmlSeverityType.Error:
{
Debug.WriteLine("Error: {0} on file [{1}]", e.Message, filePath);
} break;
case XmlSeverityType.Warning:
{
Debug.WriteLine("Error: {0} on file [{1}]", e.Message, filePath);
} break;
}
bValidated = false;
}
);
tmpDoc.Validate(eventHandler);
}
catch
{
bValidated = false;
}
return bValidated;
}