web-dev-qa-db-fra.com

Convertir XDocument en flux

Comment convertir le XML d'un XDocument en un MemoryStream, sans rien enregistrer sur le disque?

39
mickyjtwin

Jetez un œil à la méthode XDocument.WriteTo ; par exemple.:

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);
    }
}
29
dtb

Dans .NET 4 et versions ultérieures, vous pouvez l'enregistrer dans un MemoryStream:

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

Dans .NET 3.5 et versions antérieures, vous devez créer un XmlWriter basé sur un MemoryStream et l'enregistrer, comme indiqué dans réponse de dtb .

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