加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 从Stream读取XML

发布时间:2020-12-15 08:21:01 所属栏目:百科 来源:网络整理
导读:我正在使用ASP.NET,并从表单导入 XML文件.现在我把它转换为Stream: Stream inputStream = XmlFileUploadControl.PostedFile.InputStream; 因为我以后可能需要这个版本. 我想首先检查以确保XML文件具有正确的格式,如果是,则显示一些信息: if (CorrectFileFo
我正在使用ASP.NET,并从表单导入 XML文件.现在我把它转换为Stream:
Stream inputStream = XmlFileUploadControl.PostedFile.InputStream;

因为我以后可能需要这个版本.

我想首先检查以确保XML文件具有正确的格式,如果是,则显示一些信息:

if (CorrectFileFormat(inputStream))
{
    DisplayLicenseInfo(inputStream);
}

else
{
    StatusLabel.Text = "Selected file is not a LicensingDiag XML file";
}

CorrectFileFormat()方法:

protected Boolean CorrectFileFormat(Stream inputStream)
{

    XmlReader reader = XmlReader.Create(inputStream);

    if (reader.MoveToContent() == XmlNodeType.Element && reader.Name == "DiagReport")
    {
        return true;
    }
}

DisplayLicenseInfo()方法:

protected void DisplayLicenseInfo(Stream inputStream)
{

    XmlReader reader = XmlReader.Create(inputStream);

    if (reader.MoveToContent() == XmlNodeType.Element && reader.Name == "LicensingStatus")
    {
        StatusLabel.Text += ("Licensing Status: " + reader.ReadString() + "<br><br>");
    }

}

但是,我遇到了一个XmlException,它说“根级别的数据无效.第1行,第1行”.这是因为我已经读过一次输入流,需要重置它吗?如果是这样,我该怎么做?

解决方法

第一次在流周围创建XmlReader时,它位于位置0.但是第二次创建XmlReader时,流已经被部分读取,因此它不再位于位置0,因此XmlReader无法读取XML文档.

相反,您应该只创建一次XmlReader:

using (XmlReader reader = XmlReader.Create(inputStream)
{
    if (CorrectFileFormat(reader))
    {
        DisplayLicenseInfo(reader);
    }
    else
    {
        StatusLabel.Text = "Selected file is not a LicensingDiag XML file";
    }
}

如果文件很小,您还可以考虑使用XmlDocument或XDocument(Linq to XML)加载整个XML文档

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读