2011-04-15 105 views
0

代碼在帖子末尾。 做了一些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

回答

0

在根元素之外允許的唯一東西是XML聲明,註釋和處理指令。所以有可能文檔正確啓動,但在根元素之前還有一些其他廢話(非空白)。如果解析器不知道如何處理它,BOMs確實也會導致這個問題,但這可能不是這種情況。

你也可以考慮嘗試Stax解析器,比如Woodstox,因爲儘管它可能會遇到同樣的問題(不管它是什麼),它應該能夠給你一些關於實際問題的更多信息 - 你得到的消息太稀疏了,解析器正在懶惰;它至少應該指明位置(相對於文件的開始)。

0

我在使用壓縮時遇到過這個問題。未壓縮的流有時會得到一個額外的字符。

相關問題