C#: Get indented xml-based string
Manipulating XmlNodes we can get the result xml-based string using the InnerXml property of the XmlDocument-object the XmlNodes belong to. For example,
using System;
using System.Xml;
using System.IO;
...
// create XmlDocument object
XmlDocument xmlDOc = new XmlDocument();
xmlDOc.LoadXml(@"<rootNode><firstChildNode name=""first"" /></rootNode>");
// manipulate with its nodes
XmlNode secondChildNode = xmlDOc.CreateElement("secondChildNode");
XmlAttribute nameAttr = xmlDOc.CreateAttribute("name");
nameAttr.Value = "secondChildNode";
secondChildNode.Attributes.Append(nameAttr);
XmlNode rootNode = xmlDOc.SelectSingleNode("/rootNode");
rootNode.AppendChild(secondChildNode);
// get the result xml-based string
string result = xmlDOc.InnerXml;
The following string is obtained:
<rootNode><firstChildNode name="first" /><secondChildNode name="secondChildNode" /></rootNode>
However, very often the result xml-based string is required to be formatted with indentations as it looks in many xml editors. The following method can be used for this:
public static string XmlDocToString(XmlDocument xmlDoc)
{
StringWriter sw = new StringWriter();
XmlTextWriter xw = new XmlTextWriter(sw);
xw.Formatting = Formatting.Indented;
xmlDoc.WriteTo(xw);
return sw.ToString();
}
I usually use this method before displaying or saving the string in file. The indented result looks like:
<rootNode> <firstChildNode name="first" /> <secondChildNode name="secondChildNode" /> </rootNode>
How to use:
string formattedStr = XmlDocToString(xmlDOc);