【问题标题】:Can't load XML in C#无法在 C# 中加载 XML
【发布时间】: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的存在来切换您的逻辑>.

标签: c# xml


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多