【问题标题】:Get a error list after validate xml against a schema file根据模式文件验证 xml 后获取错误列表
【发布时间】:2013-08-07 19:05:23
【问题描述】:

我正在根据模式 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;

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

有什么想法吗?

【问题讨论】:

  • 您的 catch 对错误没有任何作用。你遇到了什么错误,为什么你不做任何事情?
  • 你为什么不返回一个异常呢?然后简单地记录它,或者把它放在一个数组或列表上。
  • 异常时只有一个错误,然后退出验证。我想将所有错误存储在一个列表中,然后将其返回以进行处理。上面的代码只是我找到的一个例子。
  • “异常成立...” 你说的这个异常在哪里?你的捕获会压制任何异常。是的,函数在遇到第一个错误时会返回false,但你甚至不知道错误是什么!
  • 我想做什么并不难理解,但我改了代码。我希望现在更容易理解了。

标签: c# asp.net xml xsd


【解决方案1】:

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

例如

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

如果你不这样做,XmlSchemaValidationException 将被抛出,并且只有那个可以被捕获。

【讨论】:

  • 很高兴答案有帮助:)
【解决方案2】:

我尝试了 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 2011-05-19
    • 2015-11-07
    • 2020-03-03
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多