解決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