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

     

  • 相关阅读:
    【EC】DropShipping
    【电商】淘宝商家论坛
    【电商】后台
    【产品】小龙的饭否记录
    【用研】00后这一代
    【产品】未来趋势
    【数据产品】flurry
    【产品思考】各产品春晚方案
    计算概论(二)计算机与程序运行基本原理
    计算概论(一)计算起源、图灵机、计算原理
  • 原文地址:https://www.cnblogs.com/liweis/p/13714648.html
Copyright © 2011-2022 走看看