DOM解析XML報錯:Content is not allowed in prolog


報錯內容為:

Content is not allowed in prolog. Nested exception: Content is not allowed in prolog.

網上所述總結來說就是 解析內容內包含BOM 。這個標記是看不到的,流里面有這個標記而已。 
BOM:Byte Order Mark,中文名字節順序標記。UCS規范建議在傳輸字節流前,先傳輸BOM來判斷字節順序。 
其實UTF-8是不需要用BOM來表明字節順序的,但是可以 用BOM來表明編碼方式。BOM的UTF-8編碼是EF BB BF,所以呢,如果接受者收到EF BB BF開頭的字節流,就說明它是UTF-8編碼了。

解決辦法:

如果解析的是文件 :

可以用UltraEdit或者EmEditor打開XML,然后另存為,保存的時候有選項是以無BOM的UTF-8保存還是以有BOM的UTF-8保存。

如果是從遠程請求回來的內容:

那么你把返回的流New為字符串,是看不到BOM的,但是你必須截取你需要的內容:

if(null != result && !"".equals(result)){ if(result.indexOf("<") != -1 && result.lastIndexOf(">") != -1 && result.lastIndexOf(">") > result.indexOf("<")) result = result.substring(result.indexOf("<"), result.lastIndexOf(">") + 1); }

也有說是DOM4J版本較低引起的,但是我看了一下我是用的版本是1.6.1,所以排除此類可能,但是在實際中我還是建議使用最新穩定版本來進行開發。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM