XmlDocument.LoadXml上的坑

2023-11-03 23:32
文章标签 loadxml xmldocument

本文主要是介绍XmlDocument.LoadXml上的坑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

这篇关于XmlDocument.LoadXml上的坑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/341647

相关文章

ajax返回结果为 [object XMLDocument]

在firefox下使用jquery ajax处理struts2 返回json类型的时候,ajax执行成功返回结果为 [object XMLDocument]。处理办法:在getWriter.print();前面加上一行代码ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");

C++xml文件操作 CMarkup学习方法说明 最近正在研究C++下的XML分析工具CMarkup。初次和XML相遇是基于C#对XML的操作。C#的XmlDocument和XmlNode给我印象

C++xml文件操作 CMarkup学习方法说明 最近正在研究C++下的XML分析工具CMarkup。初次和XML相遇是基于C#对XML的操作。C#的XmlDocument和XmlNode给我印象之深,让我至今都无法忘怀。现在想在C++下发掘XML的强大,结果却发现建房子你除了需要基本的建设材料外,还需要些而外的工具。不像C#那样,已经打成包供你直接使用了。好在有知道CMarkup

【转】XmlDocument与XPath

XPath 是 XML 的内容,这里 SelectNodes 是 C# 中 XmlDocument 或 XmlNode 的一个方法。SelectNodes 使用 XPath 来选取节点。 重要语法 SelectNodes("item") 从当前节点的儿子节点中选择名称为 item 的节点。 SelectNodes("/item") 从根节点的儿子节点中选择名称为 item 的

firefox(火狐)浏览器中ajax请求返回data时出现[object XMLDocument]的情况的分析

使用ajax来异步处理数据时,有时候需要返回data,这时候我们在service(action)中使用下面的代码完成返回: HttpServletResponse response = ServletActionContext.getResponse();response.setCharacterEncoding("UTF-8"); 数据在ie下面显示正常,但在火狐下面显示是xml,aler

mj_loadXML error: b‘XML parse error at line 0, column 0:\nFailed to open file\n‘

如下图可知,其Failed to load XML file 此问题通常是文件路径出现了问题。 这个地方我们就要去区别./和…/的区别,往往是我们不能区别二者的使用情况,导致程序运行错误。 "./":代表目前所在的目录。" . ./":代表上一层(父级)目录。 此处,我是将文件路径…/resources/xz01.xml 改称 ./resources/xz01.xml ,问题成功解决。