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

mar*_*ark 6 .net c# 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();
}
Run Code Online (Sandbox Code Playgroud)

我检查过,在根XML元素xmlReader后正确对齐MoveToContent.

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

谢谢.

Jon*_*eet 10

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

xmlWriter.Flush();
Run Code Online (Sandbox Code Playgroud)

或者,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();
}
Run Code Online (Sandbox Code Playgroud)

你可能也想做同样的事情XmlReader,虽然在这种特殊情况下我不相信你特别需要.

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