加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XmlDocument.LoadXml上的坑

发布时间:2020-12-16 09:24:25 所属栏目:百科 来源:网络整理
导读:XmlDocument加载xml文档,可以用Load加载实体文件,也可以用LoadXml加载字符串,但是使用的时候有个小坑需要注意。先来看以下几行代码: varxml=newXmlDocument();xml.Load("test.xml");//---方法1xml.LoadXml(File.ReadAllText("test.xml",Encoding.UTF8));

XmlDocument加载xml文档,可以用Load加载实体文件,也可以用LoadXml加载字符串,但是使用的时候有个小坑需要注意。先来看以下几行代码:

varxml=newXmlDocument();
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,要去除掉再转化字符串。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读