prinzipiell ist der Code für die Traversierung immer identisch, es hängt lediglich davon ab, in welcher Darstellung Du dein Xml hast. Ich habe ein Beispiel entwickelt, das einmal DOM und einmal Linq2Xml als Darstellungsformen für das XML verwendet. Traversierung ist bis auf den Knotentyp und Methode zum Abrufen der Kinder eines Knotens gleich.
public class ReadXml { public static string GetTestData() { return "<root><child1><grandchild1_1></grandchild1_1></child1><child2><grandchild2_1></grandchild2_1><grandchild2_2></grandchild2_2></child2></root>"; }
public static void ReadUsingDom() { string testdata = GetTestData();
XmlDocument doc = new XmlDocument(); doc.InnerXml = testdata; // etwas grob, aber fürs Beispiel ausreichend Traverse(doc); }
public static void ReadUsingLinq2Xml() { string testdata = GetTestData();
Mithilfe von Funktoren kann man sich in der Traversierung von der Darstellungsform unabhängig machen. Dazu übergibt man eine Action, die auf jeder Node während der Traversierung aufgerufen werden soll und einen Funktor, der die Kinder eines Knotens auswählt. Das könnte dann so aussehen:
public class ReadXml2 { public static string GetTestData() { return "<root><child1><grandchild1_1></grandchild1_1></child1><child2><grandchild2_1></grandchild2_1><grandchild2_2></grandchild2_2></child2></root>"; }