.
Anmeldung | Registrieren | Hilfe | Posteingang
Suchen
Home Foren News Member Offers Termine Developer Blogs Knowledge Base

Navigation

Navigationslinks überspringen.
Knowledge Base reduzierenKnowledge Base
Tutorials reduzierenTutorials
Webentwicklung
Cliententwicklung
Datenbankentwicklung
IT Professional
Sharepoint
Sprachspezifisch reduzierenSprachspezifisch
C#
Visual Basic
C++
XAML
SQL
JavaScript
Erfahrungsberichte reduzierenErfahrungsberichte
Entwicklersoftware
Bücher
FAQ Grundlagen

Verknüpfungen

  • Knowledge Base durchsuchen
  • Hilfe zur Knowledge Base
  • RSS Feed
  • Twitter

LINQ to XML Teil 2 – Abfragen einer XML Datei

Dies ist der zweite Teil einer Einführung in LINQ to XML.

In diesem Artikel geht es um das Abfragen von Daten aus einer XML Datei. Mit Linq to XML ist es möglich, XML Dateien wie eine Datenbank abzufragen. Es ist zum Beispiel denkbar, alle Daten auszugeben die mit einem bestimmten Buchstaben beginnen. Diese können in der gleichen Abfrage auch alphabetisch sortiert werden. Das hört sich nach SQL an, die Syntax ist auch sehr ähnlich.
Als Basis für die folgenden Beispiele wird diese XML Datei verwendet.

<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<Adressen>
  <Adresse>
    <Name>Harry Bo</Name>
    <Telefon>02854925876</Telefon>
    <Anschrift>
      <Straße>Hansastraße 19</Straße>
      <Stadt>Düsseldorf</Stadt>
      <Postleitzahl>40210</Postleitzahl>
    </Anschrift>
  </Adresse>
  <Adresse>
    <Name>Anna Log</Name>
    <Telefon>0575459753</Telefon>
    <Anschrift>
      <Straße>Winzererstraße 15</Straße>
      <Stadt>Nürnberg</Stadt>
      <Postleitzahl>90001</Postleitzahl>
    </Anschrift>
  </Adresse>
  <Adresse>
    <Name>Maria Kron</Name>
    <Telefon>05359746358</Telefon>
    <Anschrift>
      <Straße>Aachener Straße 62</Straße>
      <Stadt>Hannover</Stadt>
      <Postleitzahl>10001</Postleitzahl>
    </Anschrift>
  </Adresse>  
  <Adresse>
    <Name>Axel Höhle </Name>
    <Telefon>0384887778</Telefon>
    <Anschrift>
      <Straße>Bahnhofstraße 21</Straße>
      <Stadt>Berlin</Stadt>
      <Postleitzahl>10001</Postleitzahl>
    </Anschrift>
  </Adresse> 
</Adressen>

Für Linq to XML wird ein Objekt vom Type XDocument oder XElement benötigt, was die Daten des XML Files beinhaltet. Die Daten können mit einer Zeile Code geladen werden:

var adressen = XElement.Load(pathXmlFile);

Zu Beginn wird gezeigt, wie einfach es ist, durch die einzelnen Datensätze zu iterieren, denn nicht immer ist eine Linq Abfrage nötig um Daten aus einer XML Datei auszulesen und anzuzeigen:

foreach (var a in adressen.Elements())
    Console.WriteLine(a.Element("Name").Value);


Mit Hilfe der foreach Schleife werden alle Namen aus der XML Datei ausgegeben. In oben stehenden Beispiel befinden sich die Namen in der obersten Ebene des Adressen-Elements, wie tiefer verschachtelte Daten ausgelesen werden zeigt das nächste Snippet:

foreach (var a in adressen.Elements())
{
    var anschrift = new XElement(a.Element("Anschrift"));
    Console.WriteLine(anschrift.Element("Postleitzahl").Value);
}

Es wird eine Hilfsvariable -anschrift- angelegt, mit dieser Variable kann wiederum auf deren Child-Element "Postleitzahl" zugegriffen werden.
Bis hierher wurde nur der Namespace System.XML.Linq genutzt. Die folgenden Beispiele verwenden den Namespace System.Linq.
Die folgende Linq Abfrage gibt eine generische Liste zurück, die Objekte enthält, die das Interface IEnumerable implementieren. Die Abfrageergebnisse können also wieder mit foreach Schleife durchlaufen werden.

// Ausgabe aller Namen per Abfrage:
Console.WriteLine(Environment.NewLine + "Ausgabe aller Namen per Abfrage:");

var personen = from a in adressen.Elements()
               select a.Element("Name").Value;

foreach (var p in personen)
    Console.WriteLine(p);


Die Linq Abfrage ist an den Schlüsselwörtern from und select deutlich zu erkennen. Die Ausgabe auf der Console zeigt alle Namen, genau wie im allerersten Beispiel. Diese Abfrage lässt sich aber im Gegensatz zum ersten Beispiel sehr einfach erweitern. Die zwei folgenden Beispiele zeigen, wie das Abfrageergebnis sortiert und gefiltert werden kann.

// Ausgabe aller Namen die mit 'A' beginnen
Console.WriteLine(Environment.NewLine + "Ausgabe aller Namen die mit 'A' beginnen");
personen = from a in adressen.Elements()
           where a.Element("Name").Value.StartsWith("A")
           select a.Element("Name").Value;

foreach (var p in personen)
    Console.WriteLine(p);

// Ausgabe aller Straßennamen alphabetisch sortiert
Console.WriteLine(Environment.NewLine + "Ausgabe aller Straßennamen alphabetisch sortiert:");
personen = from a in adressen.Elements()
           orderby a.Element("Anschrift").Element("Straße").Value
           select a.Element("Anschrift").Element("Straße").Value;

foreach (var p in personen)
    Console.WriteLine(p);


Im nächsten Artikel wird beschrieben, wie XML Dateien manipuliert werden können. (Insert Update und Delete)
Im Anhang befindet sich ein Beispielprojekt das alle oben genannten Codebeispiele enthält.

Download Demoprojekt

von Jan Welker, 21.06.2008 zugeordnet zu C# , Cliententwicklung , Tutorials , Webentwicklung .

Weiterführende Artikel

LINQ to XML Teil 3 – Manipulieren einer XML Datei
http://dotnet-forum.de/KnowledgeBase/articles/2008/06/22/298-linq-to-xml-teil-3-ndash-manipulieren-einer-xml-datei.aspx

Kommentare

Es sind noch keine Kommentare vorhanden.

Eigener Kommentar

Sie müssen angemeldet sein, um ein Kommentar zu erstellen.
  • Schwierigkeit: Einsteiger
  • Views: 24350
  • Zur Druckversion
  • Artikel von Jan Welker

Kick it on dotnet-kicks.de

Artikel

Autor

Kick it!

Wenn ihnen dieser Artikel gefällt, bitte "kicken" sie ihn.

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum