无法在 C# 中加载 XML

Posted

技术标签:

【中文标题】无法在 C# 中加载 XML【英文标题】:Can't load XML in C# 【发布时间】:2021-12-01 10:40:30 【问题描述】:

由于有时我需要从 XML 加载数据,并且 XML 文件可以是不同的格式。 我不知道我正在加载哪种格式,但我有加载 XML 的字节数组。因此,我尝试读取一些行以确定文件的版本,因为所有文件都太大了:

string sFileHeaderPart = System.Text.Encoding.UTF8.GetString(uplFile.FileBytes, 0, 176);
if (sFileHeaderPart.Contains("DATA_CATALOG"))

    // version 1

if (sFileHeaderPart.Contains("FormatVersion"))

   // version 2

我得到的“版本 2”的 sFileHeaderPart 值如下:

<?xml version="1.0" encoding="UTF-8"?>
<DataList xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
  <FormatVersion>2.0</FormatVersion>

使用“版本 1”一切正常。 但是用“版本2”是个问题。 我试过这段代码:

System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.LoadXml(sFileHeaderPart); // <-- got an exception here

还有这段代码:

System.Xml.XmlTextReader r = new System.Xml.XmlTextReader(new System.IO.StringReader(sFileHeaderPart));
while (r.Read()) // <-- got an exception here

    if (r.NodeType == System.Xml.XmlNodeType.Element && r.Name == "FormatVersion")
    Console.WriteLine(r.ReadOuterXml());

r.Close();

所以,请帮我解决这个问题。 谢谢。

【问题讨论】:

请编辑您的问题并添加您收到的异常/错误的文本。 您显示的一小部分 XML(在 “我得到的“版本 2”的 sFileHeaderPart 的值是这样的” 之后的部分)格式不正确。 &lt;DataList&gt; 元素永远不会关闭 为什么只读取uplFile.FileBytes的前176字节? 不要说“ 看起来您正在尝试仅加载 sFileHeaderPart 9the 前 176 个字节)而不是整个 XML 字符串。如果您要关闭的信息是 XML 文档的一部分,我会在任何一种情况下读入并解析整个 XML 文档,然后根据特定 elements的存在来切换您的逻辑>. 【参考方案1】:

非常感谢您的 cmets。因此,我通过删除第一行并添加结束标签来解决问题。现在 sFileHeaderPart 看起来像:

<DataList xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
  <FormatVersion>2.0</FormatVersion>
</DataList >```

【讨论】:

以上是关于无法在 C# 中加载 XML的主要内容,如果未能解决你的问题,请参考以下文章

怎样在treeview中加载数据库 C#

无法在 Vista x64 的 C# 应用程序中加载 C++ DLL

在 VS2003 中加载 c# 项目的问题

C# 在 appdomain 调用方法中加载 dll,而不会再次加载 dll

C# 如何在pannel控件中加载子窗口(form)

在 Javascript 中加载 XML 数据时出错