http://stackoverflow.com/questions/34362949/xml-operations-using-c-sharp/34369385#34369385

CSharp · Console

/Program.cs

using System;
using System.Xml;
					
public class Program
{
	public static void Main()
	{
		string xml = @"<xml>
                              <Test1>
                                <Test1-Sub1>
                                  Testing 1 sub 1
                                </Test1-Sub1>
                                <Test1-Sub2>
                                  <Test1-Sub2-SubPart1>
                                    Testing Sub2-SubPart1
                                  </Test1-Sub2-SubPart1>
                                </Test1-Sub2>
                              </Test1>
                              <Test2>
                                <Test2-Sub1>
                                  <Test2-Sub1-SubPart1>
                                    Testing Sub1-SubPart1
                                  </Test2-Sub1-SubPart1>
                                 </Test2-Sub1>
                              </Test2>
                            </xml>";

            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();
            xmlDoc.LoadXml(xml); 
        }

        public string Build()
        {
            Build(xmlDoc.DocumentElement);
            return hierarchicalText;
        }

        private void Build(XmlElement xmlElement) 
        {            
            if (xmlElement.HasChildNodes)
            {
                HandleXmlElementName(xmlElement);

                foreach (XmlNode item in xmlElement.ChildNodes)	 
                {
                    indentlevel++;

                    if (item.NodeType == XmlNodeType.Text)
                    {
                        HandleXmlElementInnerText(xmlElement);                      
                    }
                    else if (item.NodeType == XmlNodeType.Element)
                    {
                        Build((XmlElement)item);
                    }
                    //add more conditions based on different xml node types in future, if u want

                    indentlevel--;
                }
               
            }           
        }

        private void HandleXmlElementInnerText(XmlElement xmlElement)
        {
            addIndent();
            hierarchicalText +=  PIPE + SPACE + xmlElement.InnerText.Trim();
            addNewLine(); 
        }

        private void HandleXmlElementName(XmlElement xmlElement)
        {
            addIndent();
            hierarchicalText += xmlElement.Name;
            addNewLine();
        }

        private void addIndent()
        {
            for (int i = 0; i < indentlevel; i++)
            {
                hierarchicalText += TAB;
            }
        }

        private void addNewLine()
        {
            hierarchicalText += NEW_LINE;
        }
    }
}
;