Java 'Prolog中不允许包含内容'

Java 'Prolog中不允许包含内容',java,xml,sax,saxparser,Java,Xml,Sax,Saxparser,代码在帖子的末尾。 进行了一些谷歌搜索,如果您在XML文件中的根数据标记之前有数据,则可能会发生此错误。我已经查看了即将进入的字节流,它以60或“开头。根元素之外只允许XML声明、注释和处理指令。所以文档有可能正确启动,但在根元素之前还有一些其他的垃圾非空白。如果解析器不知道如何处理bom,bom也确实会导致这个问题,但这里可能不是这样 你也可以考虑尝试STASX解析器,比如WooStox,因为它可能会碰到同样的问题,不管它是什么,它应该能够给你更多的关于实际问题的信息-你得到的消息太稀疏,分析

代码在帖子的末尾。
进行了一些谷歌搜索,如果您在XML文件中的根数据标记之前有数据,则可能会发生此错误。我已经查看了即将进入的字节流,它以60或“开头。根元素之外只允许XML声明、注释和处理指令。所以文档有可能正确启动,但在根元素之前还有一些其他的垃圾非空白。如果解析器不知道如何处理bom,bom也确实会导致这个问题,但这里可能不是这样


你也可以考虑尝试STASX解析器,比如WooStox,因为它可能会碰到同样的问题,不管它是什么,它应该能够给你更多的关于实际问题的信息-你得到的消息太稀疏,分析器是懒惰的;它至少应该指示相对于文件开头的位置。

我在使用压缩时看到过这个问题。未压缩的流有时会得到一个额外的字符。

显然,问题出在NamespaceFilter中——它正在破坏输入流。由于您没有提供源代码,我们无法判断错误。这通常表示在声明之前有一些数据;如果声明的编码与用于编写文档的编码不匹配,也可能发生这种情况。
 XMLReader r = XMLReaderFactory.createXMLReader();
 SAXSource source = new SAXSource(new NamespaceFilter(r), new InputSource(is));

 validator.validate(source, null);