Possible to write XML to memory with XmlWriter? Possible to write XML to memory with XmlWriter? xml xml

Possible to write XML to memory with XmlWriter?


If you really want to write into memory, pass in a StringWriter or a StringBuilder like this:

using System;using System.Text;using System.Xml;public class Test{    static void Main()    {        XmlWriterSettings settings = new XmlWriterSettings();        settings.Indent = true;                StringBuilder builder = new StringBuilder();        using (XmlWriter writer = XmlWriter.Create(builder, settings))        {            writer.WriteStartDocument();            writer.WriteStartElement("root");            writer.WriteStartElement("element");            writer.WriteString("content");            writer.WriteEndElement();            writer.WriteEndElement();            writer.WriteEndDocument();        }        Console.WriteLine(builder);    }}

If you want to write it directly to the response, however, you could pass in HttpResponse.Output which is a TextWriter instead:

using (XmlWriter writer = XmlWriter.Create(Response.Output, settings)){    // Write into it here}


Something was missing on my side: flushing the XmlWriter's buffer:

static void Main(){    XmlWriterSettings settings = new XmlWriterSettings();    settings.Indent = true;            StringBuilder builder = new StringBuilder();    using (XmlWriter writer = XmlWriter.Create(builder, settings))    {        writer.WriteStartDocument();        writer.WriteStartElement("root");        writer.WriteStartElement("element");        writer.WriteString("content");        writer.WriteEndElement();        writer.WriteEndElement();        writer.WriteEndDocument();        writer.Flush();    }    Console.WriteLine(builder);}


    StringBuilder xml = new StringBuilder();    TextWriter textWriter = new StringWriter(xml);    XmlWriter xmlWriter = new XmlTextWriter(textWriter);

Then, use the xmlWriter to do all the xml writing, and that writes it directly to the StringBuilder.

Edit: Thanks to Jon Skeet's comment:

    StringBuilder xml = new StringBuilder();    XmlWriter xmlWriter = XmlWriter.Create(xml);