我有以下代码在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();
我无法弄清楚这个问题。任何见解?
答案 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)