【问题标题】:How to write System.Xml.Linq.XElement using XmlWriter to a stream如何使用 XmlWriter 将 System.Xml.Linq.XElement 写入流
【发布时间】:2009-12-08 08:33:18
【问题描述】:

我有一个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 之后正确对齐。

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

    您还没有展示 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)

    【讨论】:

    • 就是这样。我没有冲洗作家。谢谢。
    • 顺便说一句,感谢您的评论,我将相应地更改我的实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    相关资源
    最近更新 更多