解决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);
}

private void ReadXmlByString(string strXml)
{
    XmlDocument doc = new XmlDocument();
    //错误:System.ArgumentException:“路径中具有非法字符。”
    //doc.Load(strXml);
    //正确
    doc.LoadXml(strXml);
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM