【问题标题】:XmlReader Read() ExceptionXmlReader Read() 异常
【发布时间】:2023-03-05 08:06:01
【问题描述】:

我正在尝试使用 xmlreader 读取 xml 文件,这是我的代码:

public XmlReader LoadXMLToReader(string inputXMLPathFile)
{
    byte[] xmlData = Encoding.UTF8.GetBytes(inputXMLPathFile);
    MemoryStream xmlStream = new MemoryStream(xmlData);
    xmlStream.Position = 0;

    XmlReader reader = XmlReader.Create(xmlStream);
    reader.Read();
    return reader;
}

该函数在reader.read() 上给我一个错误“根级别的数据无效。第 1 行位置 1”,我阅读了 BOM,那么如何修复此函数以防止该 BOM?

<?xml version="1.0" encoding="UTF-8" ?>
<Columns>
  <Column>1</Column>
  <Column>2</Column>
  <Column>3</Column>
</Columns>

有人可以帮我吗?

【问题讨论】:

  • 您尝试加载的 xml 文件的结构是什么?请问您也可以更新您的问题吗?
  • 你为什么要这样做?试试XmlReader.Create(new StreamReader(inputXMLPathFile))。为什么你应该做第一个Read?让你的来电者这样做。
  • 这不能解决我的异常...
  • inputXMLPathFile 中到底是什么?它是文件的路径,还是包含 XML?
  • 如果 inputXMLPathFile 包含 XML 文件的路径,这就是导致异常的原因。我不认为Encoding.UTF8.GetBytes() 做你认为它做的事。你现在的方式是,你试图将文件路径解析为 XML,而不是文件的实际 contents

标签: c# asp.net xml stream


【解决方案1】:

问题出在这行代码:

byte[] xmlData = Encoding.UTF8.GetBytes(inputXMLPathFile);

您正在将 文件名 传递给一个函数,该函数返回一个字符串的二进制表示——传递给该函数的实际字符串的二进制表示,而不是,不知何故神奇地,一个文件引用的路径是作为字符串值偶然传入的。

有许多选项可以简化您的方法。其中之一是:

public XmlReader LoadXMLToReader(string inputXMLPathFile)
{
    return XmlReader.Create(File.Open(inputXMLPathFile, FileMode.Read));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多