解决XML 根级别上的数据⽆效
解决XML 根级别上的数据⽆效
问题描述如果你使⽤过C#操作XML ,应该都遇到过本⽂所描述的问题,那就是使⽤XmlDocument 的LoadXml ⽅法读取XML ⽂件报错"XML 根级别上的数据⽆效",代码很简单,如下:
XmlDocument doc = new XmlDocument();
doc.LoadXml(filePath);
直接报错如下,难道是微软未修复的bug ?
问题分析
为了搞清楚问题,我们先来看看源码:
Load 进⾏了多次重载,⽀持直接加载⽂件路径、⽂件流、读取器。
⽽LoadXml 没有重载,只能输⼊⽀持StringReader ,即根本没有读取路径⽂件中的⽂件内容,⽽是直接把路径当作XML 处理。我们把SetupReader 中的参数分步解析后,发现当输⼊⼀个⽂件路径,并不能解
析为XML ⽂本,因为并没有<>,⽽是返回了None 所以,报错也很⾃然了,原来是我们混淆了两者的使⽤⽅法。
解决⽅案
Load :⽀持xml 路径、⽂件流、不⽀持XML ⽂本;
LoadXml :⽀持XML ⽂本,不⽀持xml 路径。
private void ReadXmlByPath(string filePath)
{
XmlDocument doc = new XmlDocument();
//正确
doc.Load(filePath);
//错误:System.Xml.XmlException:“根级别上的数据⽆效。 第 1 ⾏,位置 1。”
//doc.LoadXml(filePath);
}
网络上xml是什么意思private void ReadXmlByString(string strXml)
{
XmlDocument doc = new XmlDocument();
//错误:System.ArgumentException:“路径中具有⾮法字符。”
//doc.Load(strXml);
//正确
doc.LoadXml(strXml);
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。