Possible to write XML to memory with XmlWriter?

CloudMeta picture CloudMeta · Mar 25, 2009 · Viewed 28k times · Source

I am creating an ASHX that returns XML however it expects a path when I do

XmlWriter writer = XmlWriter.Create(returnXML, settings)

But returnXML is just an empty string right now (guess that won't work), however I need to write the XML to something that I can then send as the response text. I tried XmlDocument but it gave me an error expecting a string. What am I missing here?

Answer

Jon Skeet picture Jon Skeet · Mar 25, 2009

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
}