XmlDocument.LoadXml上的坑

XmlDocument加載xml文檔,能夠用Load加載實體文件,也能夠用LoadXml加載字符串,可是使用的時候有個小坑須要注意。先來看如下幾行代碼:c#

var xml = new XmlDocument();
xml.Load("test.xml");                                                // <--- 方法1
xml.LoadXml(File.ReadAllText("test.xml", Encoding.UTF8));            // <--- 方法2
xml.LoadXml(Encoding.UTF8.GetString(File.ReadAllBytes("test.xml"))); // <--- 方法3


運行一下,會發現方法1和2沒什麼區別,但方法3會報錯:ide

System.Xml.XmlException: 根級別上的數據無效。 第 1 行,位置 1。


緣由出在UTF8的BOM上,Windows系統下,UTF8文件保存會在頭部保存3個字節,EF BB BF,若是按文本方式處理文件(File.ReadAllText),獲得的字符串是不會包含這3個不可見字符的,但若是用二進制方式處理文件再轉字符串(File.ReadAllBytes再GetString),獲得的字符串就有問題了,致使XmlDocument認爲XML格式不合法。
spa


對本地文件來講,通常不太可能用到方法3,可是若是是從遠程接收文件,就會遇到與方法3相似的狀況了,此時須要識別一下,若是有BOM,要去除掉再轉化字符串。xml

相關文章
相關標籤/搜索