配置Xerces SAX解析器以容忍XML语法错误

时间:2010-07-23 04:12:25

标签: java xml sax xerces

解析生成错误的XML文档时出现此错误:

org.xml.sax.SAXParseException: The value of attribute "bar" associated with an element type "foo" must not contain the '<' character.

我知道造成这个问题的原因。这是这一行:

<foo bar="x<y">42</foo>

应该是

<foo bar="x&lt;y">42</foo>

我知道这不是有效的XML,但是我的代码必须无人值守地下载和解析类似的文件,并且由于政治原因,可能无法说服供应商修复错误的程序,尤其是当其他程序正在阅读时文件并容忍此错误。

有没有办法配置Xerces来容忍它?目前它将其视为致命错误。实现ErrorHandler以忽略它是不能令人满意的,因为那时文档的其余部分不会被解析。

或者,您可以建议另一个基于流的解析器,可以配置为容忍此错误吗?使用DOM解析器是不可行的,因为这些文档可能会达到数百兆字节。

2 个答案:

答案 0 :(得分:5)

  

......出于政治原因,可能无法说服供应商修复错误的程序......

出于政治原因,你应该尝试你最痛苦的让他们解决它。在他们面前挥动需求规范,说明输入必须是格式良好的XML。威胁要为开发定制解析器而付出代价。 (好吧,这可能不会起作用......)

在没有战斗的情况下放弃,你只是将这个问题留给了将来必须与这个供应商打交道的其他人。

答案 1 :(得分:4)

我认为您不会发现任何可以容忍此类错误的XML解析器。我唯一可以建议你预处理XML以消除可能发生的错误。