将XDocument转换为Stream

41

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

3个回答

48

在 .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的回答所示。


我想知道这两种方法是否都添加了\r\n和空格。如果有一个简单的选项就好了(而不是重载现有的XmlWriter)。 - beanmf

31

看一下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);
    }
}

6
或者保存 - 但是这个例子有效 ;-p - Marc Gravell
2
@Marc WriteTo()和Save()之间有什么区别? - Daniel Fortunov
5
@Daniel Fortunov: .Save 提供更多的重载,但所有这些重载最终都会调用 .WriteTo 方法。 - dtb

2
XDocument doc = new XDocument(
    new XElement(C_ROOT,
        new XElement("Child")));
using (var stream = new MemoryStream())
{
    doc.Save(stream);
    stream.Seek(0, SeekOrigin.Begin);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接