'Prolog内容不允许'

问题描述:

代码在帖子末尾。 做了一些Google搜索,看起来像这样的错误发生,如果你有你的XML文件中的根数据标记之前的数据。我查看了进入的字节流,它以60或'<'开头。所以在文件的开头没有一些奇怪的Byte-Order-Mark或其他东西。'Prolog内容不允许'

这个问题的原因是什么?

谢谢!

XMLReader r = XMLReaderFactory.createXMLReader(); 
SAXSource source = new SAXSource(new NamespaceFilter(r), new InputSource(is)); 

validator.validate(source, null); 
+2

显然问题出在`NamespaceFilter` - 它破坏了输入流。既然你没有提供源代码,我们不能说出错。 – 2011-04-15 17:44:09

在根元素之外允许的唯一东西是XML声明,注释和处理指令。所以有可能文档正确启动,但在根元素之前还有一些其他废话(非空白)。如果解析器不知道如何处理它,BOMs确实也会导致这个问题,但这可能不是这种情况。

你也可以考虑尝试Stax解析器,比如Woodstox,因为尽管它可能会遇到同样的问题(不管它是什么),它应该能够给你一些关于实际问题的更多信息 - 你得到的消息太稀疏了,解析器正在懒惰;它至少应该指明位置(相对于文件的开始)。

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