zoukankan      html  css  js  c++  java
  • 解决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);
    }
    

     

  • 相关阅读:
    新建mvc项目iis报404错误!
    .Net MVC HTTP 错误 404.0 Not Found 解决方法
    一个有趣的C#面试题
    parted分区
    sdp安装及实例
    dede:arclist标签按自定义字段排序
    dedecms标签快速
    也谈string.Join和StringBuilder的性能比较
    WinForms 实现气泡提示窗口
    各种“禁用窗口上的关闭按钮”方法总结及源码
  • 原文地址:https://www.cnblogs.com/liweis/p/13714648.html
Copyright © 2011-2022 走看看