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

     

  • 相关阅读:
    php 人员权限管理(RBAC)
    CSS3的@keyframes用法详解
    phpcms安装与使用
    PDO 数据访问抽象层
    ajax的分页查询
    php 增删改查范例(3)
    php 增删改查范例(2)
    maven部署项目流程(区分环境)
    springboot分环境打包(maven动态选择环境)
    Guava Cache -- MapMaker.makeComputingMap测试
  • 原文地址:https://www.cnblogs.com/liweis/p/13714648.html
Copyright © 2011-2022 走看看