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)
精彩评论