【问题标题】:Root Element Missing - Creating Xmldocument using XmlTextWriter缺少根元素 - 使用 XmlTextWriter 创建 Xmldocument
【发布时间】:2010-07-14 14:45:14
【问题描述】:

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

我无法找出问题所在。有什么见解吗?

【问题讨论】:

  • (一些无关的东西:虽然这不是绝对必要的,但您可以将代码包装在 using 块中,用于您的 MemoryStreamXmlTextWriter 对象——它们都是 IDisposable。)

标签: c# .net xml


【解决方案1】:

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

<Root>

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

我不确定 XmlWriter 在什么时候实际上 写出元素的起始部分 - 不要忘记它也可能有要写入的属性。它最多可以用你的代码写出&lt;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 - 似乎只有在您仍有打开的元素或属性时才有必要。)

【讨论】:

  • 程序点:.Close() 通常不比 .Flush() 更正确吗?
  • @annalata:我认为这会关闭流,我们不想在这里这样做。不过通常我只会处理作者。
【解决方案2】:

@Skeet 所说的,另外,你似乎没有关闭你的元素:

xmlWriter.WriteEndElement();

【讨论】:

  • 我在第二句话中提到了这一点 :)
  • 确实你做到了,但是在隐身模式——这是我能理解我为什么会错过它的唯一原因。 :)
【解决方案3】:

好吧,我看到你开始了文档,但我没有看到你 ending 它或 closing 它......(至少在你使用它之前没有)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2016-05-10
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多