开发者

Root Element Missing - Creating Xmldocument using XmlTextWriter

开发者 https://www.devze.com 2023-01-07 20:11 出处:网络
I\'m having the following code which is spitting \'Root Element Missing\' during doc.Load(). MemoryStream stream = new MemoryStream();

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开发者_StackOverflow中文版 out the issue. Any insights?


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.)


What @Skeet said, plus, you don't seem to close your element:

xmlWriter.WriteEndElement();


Well I see you starting the document, but I don't see you ending it or closing it... (at least not before you use it)

0

精彩评论

暂无评论...
验证码 换一张
取 消