我正在使用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文档