private void BeautifyElement(XmlElement e, int indent)
{
StringBuilder s = new StringBuilder();
s.Append('\n');
for (int i = 0; i < indent; i++)
{
s.Append(' ');
}
string afterContent = s.ToString();
for (int i_1 = 0; i_1 < prettyIndent; i_1++)
{
s.Append(' ');
}
string beforeContent = s.ToString();
// We "mark" all the nodes first; if we tried to do this loop otherwise, it would behave unexpectedly (the inserted nodes
// would contribute to the length and it might never terminate).
List<System.Xml.XmlNode> toIndent = new List<System.Xml.XmlNode>();
bool indentChildren = false;
for (int i_2 = 0; i_2 < e.ChildNodes.Count; i_2++)
{
if (i_2 == 1)
{
indentChildren = true;
}
if (e.ChildNodes.Item(i_2) is XmlText)
{
toIndent.Add(e.ChildNodes.Item(i_2));
}
else
{
indentChildren = true;
toIndent.Add(e.ChildNodes.Item(i_2));
}
}
if (indentChildren)
{
for (int i_3 = 0; i_3 < toIndent.Count; i_3++)
{
e.InsertBefore(e.OwnerDocument.CreateTextNode(beforeContent), toIndent[i_3]);
}
}
XmlNodeList nodes = e.ChildNodes;
List<XmlElement> list = new List<XmlElement>();
for (int i_4 = 0; i_4 < nodes.Count; i_4++)
{
if (nodes.Item(i_4) is XmlElement)
{
list.Add((XmlElement)nodes.Item(i_4));
}
}
foreach (XmlElement elem in list)
{
BeautifyElement(elem, indent + prettyIndent);
}
if (indentChildren)
{
e.AppendChild(e.OwnerDocument.CreateTextNode(afterContent));
}
}
}