XML分析器验证报告

时间:2008-08-28 15:02:29

标签: xml validation

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

我正在寻找能破坏这条规则的东西。它应该采用给定的模式(假设一个有效的模式)和一个xml输入并尝试在第一个错误之后继续运行并为每个错误引发一个事件或在完成时返回一个列表,所以我可以用它来生成某种类型的报告文件中的错误。这个要求来自上面,所以让我们试着保持纯粹主义“但是将”评论“保持在最低限度是没有意义的。

我正在寻找能够评估文档是否格式正确的内容,无论它是否符合架构。理想情况下,它会将这些评估为不同类型的错误。我更喜欢.Net解决方案,但我也可以使用独立的.exe。如果你知道一个使用不同平台的人继续发布它,因为其他人可能觉得它很有用。

更新:

我希望我使用它的大多数文档都 格式良好。也许是&包含在数据中而不是& amp在这里或那里,或偶尔错误放置标签。我不希望解析器能够从任何东西中恢复,只是为了尽最大努力继续前进。如果一个文件太糟糕了,它应该吐出尽可能多的“致命的,无法继续”的错误。否则,架构验证部分非常简单。

3 个答案:

答案 0 :(得分:1)

  

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

官方不需要引用:)

  

致命错误

     

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

您可以将xmllint与recover选项一起使用。

答案 1 :(得分:1)

听起来你可能想要TagSoup。它可能不是你想要的,但是对于糟糕的文档处理解析器来说它是黄金标准。

答案 2 :(得分:1)

Xercesfeature您可以设置为在致命错误后尝试继续:

  

http://apache.org/xml/features/continue-after-fatal-error
  True:在致命错误后尝试继续解析   错误:停止解析第一个致命错误。
  默认值:false
  注意:行为   设置此功能时解析器的设置   真的是未定的!因此使用   这个功能非常谨慎   因为解析器可能卡在一个   无限循环或更糟。