无法在 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 的值是这样的” 之后的部分)格式不正确。<DataList>
元素永远不会关闭
为什么只读取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的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Vista x64 的 C# 应用程序中加载 C++ DLL