using System.Collections.Generic;
public static void Main(string[] args)
var doc = XDocument.Parse(xml);
var id = doc.Descendants("Id").Single(e => e.Value == "1");
var path = string.Join("/", id.AncestorsAndSelf().Select(e => e.Name.LocalName).Reverse());
using (var reader = XmlReader.Create(new StringReader(xml)))
var elements = new Stack<string>();
case XmlNodeType.Element:
elements.Push(reader.LocalName);
case XmlNodeType.EndElement:
path = string.Join("/", elements.Reverse());