Archive for Februar 15th, 2008

MICROSOFT: Vista SP1 jetzt downloadbar

Für alle MSDN-Abonnenten ist das SP1 für Vista jetzt herunterlad- und installierbar. Hier.

War ich jetzt Erster?

XLINQ: Laden von XML-Dokumenten

Das Laden von XML-Dokumenten per LINQ to XML fühlt sich etwas anders an, als man dies bisher gemacht hat. Hier mal ein Beispiel, bei dem die Inhalte aller title-Knoten eines Dokuments ermittelt werden sollen.

Folgendes XML-Dokument soll verarbeitet werden (in natura gehört natürlich noch mehr dazu, aber es ist ja nur ein Beispiel):

< ?xml version="1.0"?>

  
     
     
  

  

Zuerst die klassische Vorgehensweise per XmlReader:

// XmlTextReader erzeugen
XmlReader rd = XmlReader.Create(Server.MapPath(“~/data.xml”));

// Liste der Titel
List titles = new List();

// Lesen
while (rd.Read())
{
   // Muss ein Element-Knoten sein und der Name des
   // Knotens muss “title” lauten
   if (rd.NodeType == XmlNodeType.Element
       && rd.LocalName == “title”)
   {
      // Inhalt des Knotens einlesen
      titles.Add(rd.ReadString());
   }
}

// Aufräumen!
rdr.Close();

So siehts beim XmlDocument aus (ohne XPath, nur DOM):

// Laden der Daten
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath(“~/data.xml”));

// Ermitteln der Daten
List titles = new List();

// cd-Knoten
foreach (XmlElement item in doc.DocumentElement.ChildNodes)
{
   // title-Knoten finden
   foreach (XmlElement current in item.ChildNodes)
   {
      if (current.LocalName == “title”)
      {
         // Inhalt auslesen
         titles.Add(current.InnerText);
      }
   }
}

Und nun das selbe Ergebnis per LINQ to XML:

// Laden der Daten
XDocument doc =
   XDocument.Load(Server.MapPath(“~/data.xml”));

// Ermitteln der “title”-Werte
var titles =
   from title in doc.Descendants(“title”)
   select title.Value;

// Überführen in generische Liste
List titleList = titles.ToList();

Das wars, mehr ist nicht nötig. Elegant. Von der Performance her dürfte es irgendwo zwischen XmlReader und XmlDocument liegen, wobei ich es noch nicht getestet habe.

Später mehr zu LINQ to XML – ist nämlich ein spannendes Thema!