Wie kann ich XML in einem XDocument in einen MemoryStream konvertieren, ohne etwas auf der Festplatte zu speichern?XDocument in Stream konvertieren
35
A
Antwort
27
Werfen Sie einen Blick auf die XDocument.WriteTo Methode; zB:
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);
}
}
24
In .NET 4 und höher können Sie es zu einem MemoryStream
sparen:
Stream stream = new MemoryStream();
doc.Save(stream);
// Rewind the stream ready to read from it elsewhere
stream.Position = 0;
In .NET 3.5 und früher, würden Sie eine XmlWriter
auf einem MemoryStream
basierend erstellen müssen und Speichern Sie das wie in dtb's answer gezeigt.
+0
Ich frage mich, ob beide Ansätze hinzufügen \ r \ n und Leerzeichen. Es wäre großartig, hier eine einfache Option zu haben (anstatt den vorhandenen XmlWriter zu überlasten) – beanmf
0
XDocument doc = new XDocument(
new XElement(C_ROOT,
new XElement("Child")));
using (var stream = new MemoryStream())
{
doc.Save(stream);
stream.Seek(0, SeekOrigin.Begin);
}
Oder .Save - aber das Beispiel hält ;-p –
@Marc Was ist der Unterschied zwischen WriteTo() und Save()? –
@Daniel Fortunov: .Save bietet mehr Überladungen, aber alle diese am Ende aufrufen .WriteTo – dtb