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

fin*_*nnw 2 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.
Run Code Online (Sandbox Code Playgroud)

我知道造成这个问题的原因.就是这条线:

<foo bar="x<y">42</foo>
Run Code Online (Sandbox Code Playgroud)

它应该是

<foo bar="x&lt;y">42</foo>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ste*_*n C 5

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

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

通过放弃而不打架,您只是将问题留给了将来必须与该供应商打交道的其他人.