忽略“尾随部分中不允许内容”SAXException

时间:2010-05-11 23:17:52

标签: java xml exception sax

我正在使用Java的DocumentBuilder.parse(InputStream)来解析XML文档。有时,我会得到格式错误的XML文档,因为在导致>的最终SAXException: Content is not allowed in trailing section之后会有额外的垃圾。 (在我看到的情况下,垃圾只是一个或多个空字节。)

我不关心最终>后的内容。是否有一种简单的方法可以用Java解析整个XML文档并让它忽略任何尾随垃圾?

请注意,通过“忽略”我不仅仅意味着捕获并忽略异常:我的意思是忽略尾随垃圾,不抛出任何异常,并返回Document对象,因为XML直到包括最终>有效。

2 个答案:

答案 0 :(得分:8)

由于您的发件人向您展示了无效的XML,因此如果您想要避免此异常,则需要在它遇到解析器之前进行纠正。如果您无法更正发件人,则需要进行某种预处理步骤。

如果情况只是你在结束标记之后有一个额外的空字节,因为你对另一个答案的一个回复而言,这可能是你可以通过将输入流包装在{{1}中而轻松实现的。你实现跳过空字节。

如果问题比空字符更复杂,那么你当然需要一个更复杂的过滤器,这可能很难。

如果您正在使用FilterInputStream,则可以向其添加回调,以便在处理完结束根标记时可以通知调用代码,并且根据该知识,调用代码可以具有异常处理程序中的逻辑,如果已发出结束信号,则简单地忽略它。 那时,解析器必须完成的任何事情都可能已经完成了!但是这个解决方案似乎并不适用于您的情况。

答案 1 :(得分:-5)

没有。包含尾随字符的文档不是XML文档。修复发件人。