Reading XML from Stream

后端 未结 2 1480
旧巷少年郎
旧巷少年郎 2021-01-17 23:53

I\'m working with ASP.NET, and am importing an XML file from a form. Right now I convert that into a Stream:

Stream inputStream = XmlFileUploa         


        
相关标签:
2条回答
  • 2021-01-18 00:28

    @thomas-levesque https://stackoverflow.com/users/98713/thomas-levesque was right, if the content itself is well-formed, then you need to rewind the stream back to the start of the content.

    The CorrectFileFormat() method:

    protected Boolean CorrectFileFormat(Stream inputStream)
    {
        // rewind the stream back to the very beginning of the content
        inputStream.Seek(0L, SeekOrigin.Begin);
        XmlReader reader = XmlReader.Create(inputStream);
    
        if (reader.MoveToContent() == XmlNodeType.Element && reader.Name == "DiagReport")
        {
            return true;
        }
    }
    

    The DisplayLicenseInfo() method:

    protected void DisplayLicenseInfo(Stream inputStream)
    {
        // rewind the stream back to the very beginning of the content
        inputStream.Seek(0L, SeekOrigin.Begin);
        XmlReader reader = XmlReader.Create(inputStream);
    
        if (reader.MoveToContent() == XmlNodeType.Element && reader.Name == "LicensingStatus")
        {
            StatusLabel.Text += ("Licensing Status: " + reader.ReadString() + "<br><br>");
        }
    }
    
    0 讨论(0)
  • 2021-01-18 00:38

    The first time you create an XmlReader around the stream, it is at position 0. But the second time you create an XmlReader, the stream has already been partially read, so it is no longer at position 0, so the XmlReader can't read the XML document.

    Instead, you should create the XmlReader only once:

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

    If the file is small, you could also consider loading the entire XML document using XmlDocument or XDocument (Linq to XML)

    0 讨论(0)
提交回复
热议问题