26 February 2008 .NET 3.5, HowTo, LINQ, LINQ to XML, Xml Robert Muehsig

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:

image

Wenn man diesen Zweig nun abrufen will, geht folgender Code:

image  
(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:

image

Ist doch schon wesentlich eleganter, oder? Als Ergebnis bekommen wir bei dieser LINQ Abfrage die XElemente:

image

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:

image

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:

image

Mit dieser LINQ Abfrage bekommt man alle komplexen Items, welche als Attribut "marketplace" "fr" haben und die Number größer als 20 ist:

image

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:

[ Download Source Code ]


Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!