缺少根元素 - 使用XmlTextWriter创建Xmldocument

时间:2010-07-14 14:45:14

标签: c# .net xml

我有以下代码在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();

我无法弄清楚这个问题。任何见解?

3 个答案:

答案 0 :(得分:13)

你还没有刷新xmlWriter,所以它可能还没有写出来。此外,您永远不会完成根元素,因此即使写出

<Root>

它不会写入结束标记。您正尝试将其加载为完整文档

我不确定XmlWriter 实际在什么时候写出了元素的起始部分 - 不要忘记它也可能有写入的属性。使用您获得的代码写出的最多是<Root

这是一个完整的程序:

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);
        }
    }
}

(请注意,我没有打电话给WriteEndDocument - 如果你仍然有开放的元素或属性,那么这似乎是必要的。)

答案 1 :(得分:0)

@Skeet说,加上,你似乎没有关闭你的元素:

xmlWriter.WriteEndElement();

答案 2 :(得分:0)

好吧,我看到你启动了这个文档,但我没有看到你endingclosing它......(至少在你使用它之前)