您好,登錄后才能下訂單哦!
XmlDocument加載xml文檔,可以用Load加載實體文件,也可以用LoadXml加載字符串,但是使用的時候有個小坑需要注意。先來看以下幾行代碼:
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會報錯:
System.Xml.XmlException: 根級別上的數據無效。 第 1 行,位置 1。
原因出在UTF8的BOM上,Windows系統下,UTF8文件保存會在頭部保存3個字節,EF BB BF,如果按文本方式處理文件(File.ReadAllText),得到的字符串是不會包含這3個不可見字符的,但如果用二進制方式處理文件再轉字符串(File.ReadAllBytes再GetString),得到的字符串就有問題了,導致XmlDocument認為XML格式不合法。
對本地文件來說,一般不太可能用到方法3,但是如果是從遠程接收文件,就會遇到與方法3類似的情況了,此時需要識別一下,如果有BOM,要去除掉再轉化字符串。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。