【发布时间】: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字节? -
不要说“
-
看起来您正在尝试仅加载
sFileHeaderPart9the 前 176 个字节)而不是整个 XML 字符串。如果您要关闭的信息是 XML 文档的一部分,我会在任何一种情况下读入并解析整个 XML 文档,然后根据特定 elements的存在来切换您的逻辑>.