如何在 Java 中解析格式错误的 XML?
Posted
技术标签:
【中文标题】如何在 Java 中解析格式错误的 XML?【英文标题】:How to parse badly formed XML in Java? 【发布时间】:2010-10-29 13:16:02 【问题描述】:我有需要解析但无法控制创建的 XML。不幸的是,它不是非常严格的 XML,并且包含以下内容:
<mytag>This won't parse & contains an ampersand.</mytag>
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,所以我想我需要一个容错解析器。
我的偏好是不需要过多中断现有解析器代码的修复。
【问题讨论】:
【参考方案1】:使用 tidy
或 tagsoup
等库。
TagSoup, a SAX-compliant parser written in Java that, instead of parsing well-formed or valid XML, parses html as it is found in the wild: poor, nasty and brutish, though quite often far from short.
【讨论】:
【参考方案2】:如果它不是有效的 XML(如上),则没有 XML 解析器会处理它(正如您所确定的)。如果您知道错误的范围(例如上述实体问题),那么最简单的解决方案可能是对其运行更正过程(修复实体,例如插入实体),然后将其提供给现有的解析器。
否则,您必须自己编写一个内置支持此类异常的代码。而且我无法相信这只是一项乏味且容易出错的任务。
【讨论】:
+1 用于自己编写代码。大多数情况下这可能是个坏主意,但在非常简单的情况下值得考虑。【参考方案3】:我相信 JSoup 可以处理格式不正确的 XML
【讨论】:
以上是关于如何在 Java 中解析格式错误的 XML?的主要内容,如果未能解决你的问题,请参考以下文章