处理 SAX 解析异常

Posted

技术标签:

【中文标题】处理 SAX 解析异常【英文标题】:Handle SAX parserexception 【发布时间】:2011-08-15 02:12:15 【问题描述】:

我的 SAX xml 解析器有问题。 我想解析一个显然无效的 xml 文件(我得到一个 ExpatParser$ParseException:在第 5 行,第 169 列:格式不正确(无效令牌))。我知道出了什么问题,但是 xml 文件不是我创建的……所以我无法更改它。

现在我想在我的 DefaultHandler 中处理该错误。但是无论是 error() 还是 fatalError() 还是 warning() 都没有被调用...

我能否以某种方式中断解析过程,告诉解析器如何处理那段无效的 xml 并继续解析???

谢谢, 摩根大通

【问题讨论】:

如果我是你,我会写一些清理代码,将 XML 传递到 SAX 解析器之前...他们全部三秒钟,因为一个小的语法错误。 我遇到的问题完全相同....***.com/questions/5673423/… 这有点像生活给你柠檬; SAX 解析器不能用柠檬制作苹果汁。郑重声明,这是对给你柠檬的那个人的恰当回应:“我不要你该死的柠檬!这些到底是什么?!要求见生活的经理!让生活在它认为可以的那一天后悔给凯夫约翰逊柠檬!你知道我是谁吗?我就是要烧毁你房子的人!用柠檬!我要让我的工程师发明一种可燃柠檬,烧毁你的房子!” (传送门2) ***.com/questions/4574710/… 【参考方案1】:

我猜这个 SAXParseException 是一个 fatal error,SAX 解析器无法从中恢复。在这种情况下,您可能需要在尝试解析之前修复错误的标签(正如 Robert 在他的评论中建议的那样)。

您可能想研究使用 Java 正则表达式来修复 XML 中已知的错误,例如Regex for quoting unquoted XML attributes

郑重声明,我提倡使用regex to actually parse XML!

【讨论】:

感谢 Dan 和 Robert,我想我会这样做的。由于 xml 非常简单,我也许可以手动解析它......我必须先处理其他事情。但我认为其中一种方法可以解决我的问题(我仍然希望我们可以让源投入 2 秒来修复 xml :-))谢谢,JPM

以上是关于处理 SAX 解析异常的主要内容,如果未能解决你的问题,请参考以下文章

Scala Sax 解析器无法处理 <!DOCTYPE XML>

XML- SAX解析

SAX解析XML文件

SAX方式解析XML

如何在Ruby on Rails上使用SAX解析器来处理大型XML文件

IOS中的XML解析之DOM和SAX