sax解析xml執行出現錯誤

2021-07-05 05:42:37 字數 1458 閱讀 1352

sax解析xml執行出現錯誤org.xml.sax.saxparseexception: content is not allowed in prolog.

原因及其解決辦法:

1.xml編碼錯誤

該xml是utf-8編碼的,如果該檔案通過ultraedit編輯後,會在無bom頭的utf-8檔案中加入bom,但是dom4j不認這個bom(dom4j1.3),解決的辦法可以通過公升級dom4j到1.6解決www.dom4j.org

什麼是bom?

unicode規範中有乙個bom的概念。bom——byte order mark,就是位元組序標記。在這裡找到一段關於bom的說明:

在ucs 編碼中有乙個叫做"zero width no-break space"的字元,它的編碼是feff。而fffe在ucs中是不存在的字元,所以不應該出現在實際傳輸中。ucs規範建議我們在傳輸位元組流前,先傳輸字元"zero width no-break space"。這樣如果接收者收到feff,就表明這個位元組流是big-endian的;如果收到fffe,就表明這個位元組流是little-endian的。因此字元"zero width no-break space"又被稱作bom。

utf-8不需要bom來表明位元組順序,但可以用bom來表明編碼方式。字元"zero width no-break space"的utf-8編碼是ef bb bf。所以如果接收者收到以ef bb bf開頭的位元組流,就知道這是utf-8編碼了。

windows就是使用bom來標記文字檔案的編碼方式的。

2.xml檔案存在非法字元

把xml 動手敲一遍,刪除不該有的間隔符:比如空格,製表符(tab)等。

異常提示是content is not allowed in prolog.意思就是說檔案開頭的時候有問題。

怎麼去掉bom:

首先windows自帶的記事本會在儲存utf-8編碼的檔案時不管是否含有bom一律加上bom,所以千萬別用記事本。比較新版本的ultraedit(以下簡稱ue,大家都是這麼叫的)都對bom支援比較好,所以推薦使用新版本的ue來解決這個問題。我用的版本是ultraedit-32 11.00a+中文版。首先開啟ue,選擇選單欄「高階」-「配置」,出現乙個選項卡視窗,在「常規」選項卡中找到「儲存時對所有utf-8檔案頭標記(bom)」和「對在ultraedit裡建立的新檔案寫入utf-8檔案頭標記(如上面)」,把它們的核取方塊都取消不選,然後確定。這個時候ue預設情況下就不會對沒有bom的檔案加入bom,注意如果不執行上述操作ue預設也是會加的!那已經含有bom的檔案如何清除bom呢?下面演示給大家。首先開啟檔案,選擇選單欄「檔案」-「格式轉換」-「utf-8 轉 ascii」,這樣檔案會被轉為ascii編碼,bom就不會存在了,因為上面說過bom是在ucs編碼的頭部的,然後再選擇選單欄「檔案」-「格式轉換」-「ascii 轉 utf-8(unicode編輯)」,這個時候檔案會被轉回為utf-8編碼,因為我們上面選了不自動加bom,所以這個時候的檔案是不帶bom的,然後儲存檔案。整個操作過程就完畢了。

XML解析之SAX解析

sax解析 核心類 saxparse ctory saxparser defaulthandler 步驟 建立工廠類例項 saxparse ctory factory saxparse ctory.newinstance 獲取解析器類例項 saxparser parser factory.newsa...

SAX解析xml檔案

public class xmlsaxactivity extends activity class mycontenthandlerlistener implements onclicklistener catch exception e public class downloadhelper c...

xml檔案解析SAX

size large xml檔案解析 xml檔案解析有四種方式,color blue 1.dom生成和解析xml文件 sax是基於事件流的解析 2.sax生成和解析xml文件 基於xml文件樹結構的解析 3.dom4j生成和解析xml文件 4.jdom生成和解析xml color 本文章用第一種方法...