温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

XmlDocument.LoadXml上的坑

发布时间:2020-06-19 23:42:17 来源:网络 阅读:2783 作者:BoyTNT 栏目:编程语言

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,要去除掉再转化字符串。



向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI