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

我正在使用 Java的DocumentBuilder.parse(InputStream)来解析XML文档.偶尔,我会得到格式错误的XML文档,因为在最终的>之后会有额外的垃圾.导致SAXException:在尾随部分中不允许使用内容. (在我看到的情况下,垃圾只是一个或多个空字节.)

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

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

解决方法

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

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

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

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

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...