代码之家  ›  专栏  ›  技术社区  ›  Joel Coehoorn

XML分析器验证报告

  •  1
  • Joel Coehoorn  · 技术社区  · 16 年前

    大多数XML解析器在文档出现第一个错误后都会放弃。事实上,IIRC实际上是解析器“官方”规范的一部分。

    我在找能打破这个规则的东西。它应该接受一个给定的模式(假设有一个有效的模式)和一个xml输入,并尝试在第一个错误之后继续运行,或者为每个错误引发一个事件,或者在完成后返回一个列表,这样我就可以使用它生成文档中错误的某种报告。这个要求来自上面,所以让我们试着保持 “但继续下去是没有意义的” 最少的评论。

    我在找一个能评估文件格式是否正确的东西 是否符合架构。理想情况下,它会将这些错误评估为不同级别的错误。我更喜欢.Net解决方案,但我也可以使用独立的.exe。如果你知道有人使用了不同的平台,请继续发布,因为其他人可能会发现它很有用。

    更新:

    我希望我使用的大部分文档 主要地 结构良好。可能是一个包含在数据中的,而不是这里和那里的数据,或者偶尔是一个错误放置的标记。我不期望解析器能够从任何东西中恢复,只是尽最大努力继续。如果一个文档太不正常,它应该尽可能多地弹出,然后出现某种“致命,无法继续”的错误。否则模式验证部分非常简单。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Damien B    16 年前

    事实上,IIRC实际上是解析器“官方”规范的一部分。

    官方不需要引用:)

    致命错误

    [定义:]一致性XML处理器必须检测到并向应用程序报告的错误。在遇到致命错误后,处理器可以继续处理数据以搜索进一步的错误,并且可以向应用程序报告此类错误。为了支持纠错,处理器可以使来自文档的未处理数据(混合字符数据和标记)可供应用程序使用。但是,一旦检测到致命错误,处理器就不能继续正常处理(即,它不能继续以正常方式将字符数据和文档逻辑结构的信息传递给应用程序)。

    你可以用 xmllint 使用恢复选项。

        2
  •  1
  •   Craig Walker    16 年前

    听起来你可能想要 TagSoup . 这可能不是您想要的,但就糟糕的文档处理解析器而言,这是金标准。

        3
  •  1
  •   jelovirt    16 年前

    Xerces 有一个 feature 您可以设置为在出现致命错误后尝试继续:

    http://apache.org/xml/features/continue-after-fatal-error
    True:尝试在出现致命错误后继续分析。
    False:在第一个致命错误时停止分析。
    默认值:false
    注意:行为 当设置此功能时 真假难辨!因此使用 此功能非常小心 因为解析器可能会陷入 无限循环或更糟。