如何知道哪个xml文件验证失败

时间:2013-07-19 13:46:13

标签: c# xml validation xsd

我有这段代码来验证我的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?我想将它移到“失败”文件夹但不知道它是哪一个我不能。

2 个答案:

答案 0 :(得分:0)

而不是返回bool,如果失败则返回文件路径,如果传递则返回空字符串。或类似的东西。

答案 1 :(得分:0)

您可以使用匿名方法,以便“捕获”您的“文件”变量,以便您可以在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;
    }