XML C# Tutorial

using System;
using System.Xml.XPath;
  class XPathNavigatorSample {
    [STAThread]
    static void Main(string[] args) {
      XPathDocument xpathDocument = new XPathDocument("../../sample.xml");
      XPathNavigator xpathNavigator = xpathDocument.CreateNavigator();
      xpathNavigator.MoveToRoot();
      NavigateTree(xpathNavigator);
    }
    private static void NavigateTree (XPathNavigator xpathNavigator) {
      if (xpathNavigator.HasChildren) {
        xpathNavigator.MoveToFirstChild();
        DisplayNode(xpathNavigator);
        NavigateTree(xpathNavigator);
        while (xpathNavigator.MoveToNext()) {
          DisplayNode(xpathNavigator);
          NavigateTree(xpathNavigator);
        }
        xpathNavigator.MoveToParent();
      }
    }
    private static void DisplayNode (XPathNavigator xpathNavigator) {
      if (xpathNavigator.NodeType == XPathNodeType.Text) {
        Console.Out.WriteLine(xpathNavigator.Value);
      } else {
        Console.Out.Write(xpathNavigator.Name);
        if (xpathNavigator.HasAttributes) {
          int attributesCount = 1;
          while (xpathNavigator.MoveToNextAttribute()) {
            attributesCount ++;
          }
          Console.Out.Write(attributesCount);
          if (attributesCount != 1) {
            xpathNavigator.MoveToParent();
          }
        }
      }
    }
  }