如何在Java中解析格式错误的XML?

我有XML需要解析但无法控制创建。 不幸的是,它不是非常严格的XML并包含以下内容:

This won't parse & contains an ampersand. 

javax.xml.stream类根本不喜欢这个,并且正确地错误:

 javax.xml.stream.XMLStreamException: ParseError at [row,col]:[149,50] Message: The entity name must immediately follow the '&' in the entity reference. 

我该如何解决这个问题? 我无法更改XML,所以我想我需要一个容错的解析器。

我倾向于修复一个不需要对现有解析器代码造成太多破坏的修复。

如果它不是有效的XML(如上所述),则没有XML解析器可以处理它(如您所识别的那样)。 如果你知道错误的范围(例如上面的实体问题),那么最简单的解决方案可能是对它运行纠正过程(修复实体,如插入实体),然后将其提供给现有的解析器。

否则,你必须自己编写代码,内置支持这种exception。 而且我无法相信除了繁琐且容易出错的任务之外的任何事情。

使用诸如tidytagsoup库。

TagSoup,一个用Java编写的兼容SAX的解析器,它不是解析格式良好或有效的XML,而是解析在野外发现的HTML:糟糕,讨厌和野蛮,尽管通常很短。

我相信JSoup可以处理格式错误的XML