在针对模式文件验证xml之后获取错误列表

时间:2013-08-07 19:05:24

标签: c# asp.net xml xsd

我正在针对架构xsd验证XML文件。到目前为止,代码在发生故障时会生成异常。

        bool isValid = true;
        List<string> errorList = new List<string>();
        try
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.Schemas.Add(null, schemaFilePath);
            settings.ValidationType = ValidationType.Schema;
            XmlDocument document = new XmlDocument();
            document.LoadXml(xml);
            XmlReader rdr = XmlReader.Create(new StringReader(document.InnerXml), settings);
            while (rdr.Read()) { }
        }
        catch (Exception ex)
        {
            errorList.Add(ex.Message);
            isValid = false;
        }

        LogErrors(errorList);
        return isValid;

但是我需要代码在将其发送到我的日志之前构建一个在validate中找到的所有错误的列表,而不是总是只显示找到的第一个错误。

有什么想法吗?

2 个答案:

答案 0 :(得分:10)

您可以将Validate methodValidationEventHandler一起使用。您可以按照MSDN的方式单独创建ValidationEventHandler,也可以根据需要内联。

e.g

    //...Other code above
    XmlDocument document = new XmlDocument();
    document.Load(pathXMLCons);
    document.Validate((o, e) => 
                      { 
                          //Do your error logging through e.message 
                      });

如果你不这样做,将抛出XmlSchemaValidationException,只有那个可以被抓住。

答案 1 :(得分:1)

我尝试过在我的情况下失败的XmlDocument。 以下代码应该有效 礼貌:C#5.0简而言之

XDocument doc = XDocument.Load("contosoBooks.xml");
XmlSchemaSet set = new XmlSchemaSet();
set.Add(null, "contosoBooks.xsd");
StringBuilder errors = new StringBuilder();
doc.Validate(set, (sender,args) => { errors.AppendLine(args.Exception.Message); });
Console.WriteLine(errors);