如何知道哪个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?我想把它移到"失败"文件夹,但不知道是哪一个,我做不到。

如何知道哪个xml文件未通过验证

如果失败,可以返回文件路径,如果通过,可以返回空字符串,而不是返回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;
    }