LINQ to SQL (siehe hier & hier) habe ich bereits behandelt, doch einer der mitgelieferten LINQ Provider wurde von mir noch vernachlässigt: LINQ to XML.
Ohne LINQ kann man XML über XPath abfragen - das ist eine nette Variante, allerdings vielleicht nicht unbedingt der Weisheits letzter Schluss.
Fangen wir mal langsam an - hier unsere einfache XML Struktur:
Wenn man diesen Zweig nun abrufen will, geht folgender Code:
(auf meinem neuen Notebook konnte ich leider noch nicht das CodeFormatting Plugin für den Windows Live Writer installieren - daher nur Screenshots und am Ende gibts den Source Code)
XDocument etc. ist in dem Namespace System.Xml.Linq vorhanden und ist im Grund wie das XmlDokument - natürlich etwas anders. Über die Methode "Descendants" können wir uns entweder (wie oben) manuell durch den Xml Baum hangeln, oder direkt auf das "Item" zugreifen:
Ist doch schon wesentlich eleganter, oder? Als Ergebnis bekommen wir bei dieser LINQ Abfrage die XElemente:
Jeder Node hat eine "Number" Element, was bei dem ersten Item auf 10, beim zweiten auf 50, beim dritten auf 60 und beim vierten Item auf 70 gesetzt wurde.
Jetzt wollen wir nur mal alle Items heranholen, welche über 55 liegen:
Wir navigieren uns wieder zu unseren Items und machen dann anschließend eine Konvertierung des Values im "Number" Tag zu einem Integer.
Am Ende werden nur noch die letzten beiden Item Einträge angezeigt.
Mal etwas komplizierter - Attribute, Verschachtelungen & Abfragen:
Unsere etwas komplexere XML Struktur:
Mit dieser LINQ Abfrage bekommt man alle komplexen Items, welche als Attribut "marketplace" "fr" haben und die Number größer als 20 ist:
Fazit:
LINQ to XML ist eine schicke Alternative zu normalen XPath und erlaubt sehr viele Spielerein. Wenn ich zeit finde, zeige ich auch noch, wie man XML Dokumente bearbeitet. Man kann das ganze natürlich noch weitertreiben. In dem select Statement kann man sich seine eigenen Datentypen erstellen etc. (dank an das Zauberwort "var").
Insbesondere für diejenigen, welche einen RSS/Atom Feedreader entwickeln wollen, sollten mal auf LINQ to XML einen Blick werfen.
Hier einen weiterführenden Link: