XML解析中Bom導致錯誤的問題分析與解決

2021-07-03 13:58:01 字數 1809 閱讀 7595

nested exception: content is not allowed in prolog.

xml編碼錯誤:

左邊報錯的xml,右邊正常的xml檔案,比較工具beyond compare 4

2、對於webservice接收來的xmlstring的處理,使用如下方法,修改xml字串

/**

* 檢查xml字串是否有非法字首

*@param xmlstr

*@return

*/public string checkxmlstr(string xmlstr)else

if(index == -1)

return xmlstr;

}

3、為了程式的健壯性,可以在讀檔案的時候,加入判斷,判斷是否有bom,有的話,在生成字串的時候,將其刪除,方法如下:

/**

* 檢查byte陣列 是否有bom頭

* utf8檔案都有乙個3位元組的頭,為「ef bb bf」(稱為bom--byte order mark)

*@param bytes

*@return

*/private

static

boolean

checkbom( byte bytes )}}

"是否有bom:"+isbom);

return isbom;

}/** * 將檔案讀取為utf-8編碼字串

*@param filepath

*@return

*/public string getxmlfiletext(string filepath) catch (unsupportedencodingexception e)

}else catch (unsupportedencodingexception e)

}//return checkxmlstr(retxmlstr);

return retxmlstr;

}// 將檔案讀成byte陣列

public

byte filetobytearray(string filepath)

fileinputstream = new fileinputstream(file);

in = new bufferedinputstream(fileinputstream);

out = new bytearrayoutputstream();

byte temp = new

byte[1024 * 1024]; //每次讀取 1m

int size = 0;

while ((size = in.read(temp)) != -1)

bt = out.tobytearray();

// for(int i = 0; i < bt.length; i++)

} catch (exception e) finally catch (ioexception e)

}return bt;

}

問題分析:

某些文字編輯器或者window系統,在儲存xml時,會在檔案開頭自動加上bom,dom4j會無法識別這個檔案流。有人說1.3不能識別、1.6可以正常識別帶bom的utf-8檔案,但是我用的就是dom4j1.6,也會報這個錯誤。

XML中DOCTYPE欄位的解析

dtd宣告始終以 doctype開頭,空一格後跟著文件根元素的名稱,如果是內部dtd,則再空一格出現,在中括號中是文件型別定義的內容.而對於外部dtd,則又分為私有dtd與公共dtd,私有dtd使用system表示,接著是外部dtd的url.而公共dtd則使用public,接著是dtd公共名稱,接著...

XML解析中的namespace初探

初學者在解析xml檔案的時候最容易遇到的問題恐怕就是xml的namespace了,本文旨在對namespace做乙個簡要的介紹。namespace的意義無需多說,和c c 等高階語言一樣,xml同樣面臨大量檔案放在一起的時候變數重名的問題,所以要用namespace把名字相同意義不同的變數隔離開。本...

PHP 中的 XML 拉模式解析

研究與 php 5 在一起的 xmlreader 庫,它使 php 頁面能夠以高效的流模式來處理 xml 文件。php 5 引入了新的類 xmlreader,用於讀取可擴充套件標記語言 extensible markup language,xml 與 xml 或文件物件模型 document obj...