Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Root Element Missing - Creating Xmldocument using XmlTextWriter

Tags:

c#

.net

xml

I'm having the following code which is spitting 'Root Element Missing' during doc.Load().

MemoryStream stream = new MemoryStream();
XmlTextWriter xmlWriter = new XmlTextWriter(stream, Encoding.UTF8);
xmlWriter.Formatting = System.Xml.Formatting.Indented;
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("Root");
XmlDocument doc = new XmlDocument();
stream.Position = 0;
doc.Load(stream);
xmlWriter.Close();

I'm not able to figure out the issue. Any insights?

like image 651
NLV Avatar asked Jul 14 '10 14:07

NLV


1 Answers

You haven't flushed the xmlWriter, so it may well not have written anything out yet. Also, you're never completing the root element, so even if it has written out

<Root>

it won't have written the closing tag. You're trying to load it as a complete document.

I'm not sure at what point an XmlWriter actually writes out the starting part of an element anyway - don't forget it may have attributes to write too. The most it could write out with the code you've got is <Root.

Here's a complete program which works:

using System;
using System.IO;
using System.Text;
using System.Xml;

class Test
{
    static void Main(string[] args)
    {
        using (MemoryStream stream = new MemoryStream())
        {
            XmlTextWriter xmlWriter = new XmlTextWriter(stream, Encoding.UTF8);
            xmlWriter.Formatting = System.Xml.Formatting.Indented;
            xmlWriter.WriteStartDocument();
            xmlWriter.WriteStartElement("Root");
            xmlWriter.WriteEndElement();
            xmlWriter.Flush();

            XmlDocument doc = new XmlDocument();
            stream.Position = 0;
            doc.Load(stream);
            doc.Save(Console.Out);
        }
    }
}

(Note that I'm not calling WriteEndDocument - that only seems to be necessary if you still have open elements or attributes.)

like image 136
Jon Skeet Avatar answered Sep 30 '22 07:09

Jon Skeet