65.9K
CodeProject is changing. Read more.
Home

Formatting XML - A Code snippet

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.82/5 (29 votes)

Jan 14, 2007

viewsIcon

83695

How to quickly format XML for a nicer display.

Introduction

I know this is basic stuff for many here, but as I couldn't find any similar article on this site I thought Id share this useful code snippet for those not so au-fait with the Xml classes.

Basically, I wanted a quick and easy way to get from a non-formatted string of XML, to something that could be nicely displayed in a textbox (ie with indenting and line breaks) without too much mucking about.

Using the code

Simple. Just call the method and display the result, eg. in a Windows forms textbox. Displaying in Webform elements may need the newline characters changed which can be done easily using String.Replace.

The code:

using System.Text;
using System.Xml;

. . .

/// <summary>

/// Returns formatted xml string (indent and newlines) from unformatted XML

/// string for display in eg textboxes.

/// </summary>

/// <param name="sUnformattedXml">Unformatted xml string.</param>

/// <returns>Formatted xml string and any exceptions that occur.</returns>


private string FormatXml(string sUnformattedXml)
{
    //load unformatted xml into a dom

    XmlDocument xd = new XmlDocument();
    xd.LoadXml(sUnformattedXml);

    //will hold formatted xml

    StringBuilder sb = new StringBuilder();

    //pumps the formatted xml into the StringBuilder above

    StringWriter sw = new StringWriter(sb);

    //does the formatting

    XmlTextWriter xtw = null;

    try
    {
        //point the xtw at the StringWriter

        xtw = new XmlTextWriter(sw);

        //we want the output formatted

        xtw.Formatting = Formatting.Indented;

        //get the dom to dump its contents into the xtw 

        xd.WriteTo(xtw);
    }
    finally
    {
        //clean up even if error

        if (xtw != null)
            xtw.Close();
    }

    //return the formatted xml

    return sb.ToString();
}

Happy coding!