java – 忽略“尾随节中不允许内容”SAXException

前端之家收集整理的这篇文章主要介绍了java – 忽略“尾随节中不允许内容”SAXException前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 Java的DocumentBuilder.parse(InputStream)来解析XML文档.偶尔,我会得到格式错误的XML文档,因为在最终的>之后会有额外的垃圾.导致SAXException:在尾随部分中不允许使用内容. (在我看到的情况下,垃圾只是一个或多个空字节.)

我不在乎最后的>后是什么.有一种简单的方法可以用Java解析整个XML文档并让它忽略任何尾随垃圾吗?

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

解决方法

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

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

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

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

猜你在找的Java相关文章