如何使用XmlWriter将System.Xml.Linq.XElement写入流

时间:2009-12-08 08:33:19

标签: c# .net xml linq-to-xml

我有一个XElement实例,我希望使用XmlWriter类写入一个流。为什么?好吧,其中一个配置设置定义是否使用二进制Xml。根据此设置,可以创建合适的XmlWriter实例 - XmlWriter.Create(stream)XmlDictionaryWriter.CreateBinaryWriter(stream))

无论如何,我正在尝试以下代码,但它将流留空:

using (var stream = new MemoryStream())
{
  var xmlReader = new XDocument(xml).CreateReader();
  xmlReader.MoveToContent();
  var xmlWriter = GetXmlWriter(stream);
  xmlWriter.WriteNode(xmlReader, true);
  return stream.ToArray();
}

我已经检查过,xmlReader在根{XML}元素MoveToContent之后正确对齐。

我一定是做错了什么,但是什么?

感谢。

1 个答案:

答案 0 :(得分:10)

你还没有展示GetXmlWriter的作用......但是你试过刷新作者吗?

xmlWriter.Flush();

或者,将XmlWriter包装在另一个using语句中:

using (var stream = new MemoryStream())
{
  var xmlReader = new XDocument(xml).CreateReader();
  xmlReader.MoveToContent();
  using (var xmlWriter = GetXmlWriter(stream))
  {
      xmlWriter.WriteNode(xmlReader, true);
  }
  return stream.ToArray();
}

您可能也希望对XmlReader也这样做,尽管在这种特殊情况下我不相信您特别需要。

说完这一切之后,我不完全确定你为什么要使用XmlReader。您有任何理由不能找到相关的XElement并使用XElement.WriteTo(XmlWriter)吗?或者,如果您要复制整个文档,只需使用XDocument.WriteTo(XmlWriter)

即可