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);