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

     

  • 相关阅读:
    内存分配机制
    typedef struct 和struct的区别
    imshow
    #include<string.h>和#include<string>
    Internal Errors
    TStopWatch 基本知识
    string 新常量 Empty
    System 这四个单元多用用(近期)
    对象释放三种方法对比:Free --> FreeAndNil() --> DisposeOf()
    程序性能优化的3个级别
  • 原文地址:https://www.cnblogs.com/liweis/p/13714648.html
Copyright © 2011-2022 走看看