public static void Main()
var builder = new XmlHierarchicalTextBuilder(xml);
Console.WriteLine(builder.Build());
public class XmlHierarchicalTextBuilder
private XmlDocument xmlDoc;
private string hierarchicalText;
private int indentlevel = 0;
private const string NEW_LINE = "\n";
private const string TAB = "\t";
private const string PIPE = "|";
private const string SPACE = " ";
public XmlHierarchicalTextBuilder (string xml)
xmlDoc = new XmlDocument();
Build(xmlDoc.DocumentElement);
private void Build(XmlElement xmlElement)
if (xmlElement.HasChildNodes)
HandleXmlElementName(xmlElement);
foreach (XmlNode item in xmlElement.ChildNodes)
if (item.NodeType == XmlNodeType.Text)
HandleXmlElementInnerText(xmlElement);
else if (item.NodeType == XmlNodeType.Element)
private void HandleXmlElementInnerText(XmlElement xmlElement)
hierarchicalText += PIPE + SPACE + xmlElement.InnerText.Trim();
private void HandleXmlElementName(XmlElement xmlElement)
hierarchicalText += xmlElement.Name;
for (int i = 0; i < indentlevel; i++)
private void addNewLine()
hierarchicalText += NEW_LINE;