将 XDocument 转换为流

Posted

技术标签:

【中文标题】将 XDocument 转换为流【英文标题】:Convert XDocument to Stream 【发布时间】:2010-10-19 12:13:38 【问题描述】:

如何将 XDocument 中的 XML 转换为 MemoryStream,而不将任何内容保存到磁盘?

【问题讨论】:

【参考方案1】:

在 .NET 4 及更高版本中,您可以将其保存到 MemoryStream

Stream stream = new MemoryStream();
doc.Save(stream);
// Rewind the stream ready to read from it elsewhere
stream.Position = 0;

在 .NET 3.5 及更早版本中,您需要基于 MemoryStream 创建一个 XmlWriter 并保存到该位置,如 dtb's answer 所示。

【讨论】:

我想知道这两种方法是否都添加了 \r\n 和空格。在这里有一个简单的选项会很棒(而不是重载现有的 XmlWriter)【参考方案2】:

看看XDocument.WriteTo方法;例如:

using (MemoryStream ms = new MemoryStream())

    XmlWriterSettings xws = new XmlWriterSettings();
    xws.OmitXmlDeclaration = true;
    xws.Indent = true;

    using (XmlWriter xw = XmlWriter.Create(ms, xws))
    
        XDocument doc = new XDocument(
            new XElement("Child",
                new XElement("GrandChild", "some content")
            )
        );
        doc.WriteTo(xw);
    

【讨论】:

或 .Save - 但示例成立 ;-p @Marc WriteTo() 和 Save() 有什么区别? @Daniel Fortunov:.Save 提供了更多的重载,但所有这些最终都会调用 .WriteTo【参考方案3】:
XDocument doc = new XDocument(
    new XElement(C_ROOT,
        new XElement("Child")));
using (var stream = new MemoryStream())

    doc.Save(stream);
    stream.Seek(0, SeekOrigin.Begin);

【讨论】:

以上是关于将 XDocument 转换为流的主要内容,如果未能解决你的问题,请参考以下文章

如何将 XElement 转换为 XDocument

将 XPath 与 XDocument 一起使用时忽略 CData

XDocument 不会解析 html 实体(例如 ),但 XmlDocument 会

从字符串填充 XDocument

将 XElement 合并到 XDocument 并解析命名空间

使用 HttpClient,如何将 XDocument 直接保存到请求流中?