Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Einfaches XML-Auslesen in .NET

Geschrieben von: Christoph Wille
Kategorie: XML

This printed page brought to you by AlphaSierraPapa

Im heutigen Artikel möchte ich Ihnen zeigen, wie einfach es in .NET geworden ist, mit XML zu arbeiten. Um einen Vergleich zu erhalten, habe ich mir zum Ziel gesetzt, den Code des Artikels Auslesen von XML Dateien mit dem DOM nachzubauen.

Der Artikel verwendet auch heute wieder die Datei currentarticles.xml, welche die fünf neuesten Artikel von AspHeute.com beinhaltet. Die Struktur dieser XML Datei sieht wie folgt aus:

<?xml version="1.0" encoding="Windows-1252"?>
<articles>
 <article>
   <title></title>
   <author></author>
   <url></url>
   <date></date>
   <description></description>
 </article>
</articles>

Das <article> Element wiederholt sich fünf Mal in dieser Datei.

Wer heute mit dem MSXML Parser und dem DOM (Document Object Model) arbeitet, kennt dessen hierarchischen Aufbau. Die gute Nachricht - Sie müssen nicht allzuviel umlernen, bekommen aber vieles an neuer Funktionalität dazu. Alle Standards inklusive XPath sind in einfach zu verwendenden Objekten verpackt.

Da wir heute aber einen Einstieg in XML für .NET machen, möchte ich gar nicht zu weit vorgreifen, und das Beispiel für sich sprechen lassen:

<% @Page Language="C#" %>
<% @Import Namespace="System.Xml" %>
<%
XmlDocument doc = new XmlDocument();
doc.Load(Page.MapPath("currentarticles.xml"));
    
XmlElement root = doc.DocumentElement;

foreach(XmlNode article in root.ChildNodes)
{
  Response.Write(@"<font size=""1"">[" + article["date"].InnerText);
  Response.Write("] </font>");
  Response.Write("<b>" + article["title"].InnerText + "</b><br>");
  Response.Write("<p>" + article["description"].InnerText + "</p>\r\n");
}
%>

Der Code ist leicht lesbar. Zuerst importiere ich den System.Xml Namespace, und erstelle mir ein XmlDocument Objekt, in das ich meine XML Datei lade (Load). Von meinem Dokument muß ich nun zum Root Element (<articles>), welches meine fünf Kindelemente (=Artikel) enthält. Dazu verwende ich die Eigenschaft DocumentElement.

Das Iterieren über die Elemente funktioniert dankenswerterweise mit einer foreach Schleife, wobei die ChildNodes Collection zu Verwendung kommt - sie enthält die Artikel. Der Output funktioniert hervorragend einfach: da jeder Artikel weitere Kindelemente (Titel, etc) hat, verwende ich den Indexer der Klasse:

XmlElement xel = article["title"];
if (null != xel) Response.Write(xel.InnerText);

Hier habe ich die "korrekte" Verwendung dargestellt - es könnte ja sein, daß das gewünschte Element nicht existiert. In diesem Fall wird null geliefert. Da ich in meinem Beispiel direkt auf InnerText durchgreife, könnte ich im Falle des Fehlens des Elements eine Null-Reference Exception erhalten. Damit so etwas bei einem wichtigen Element wie Titel nicht passiert, sollte man ein Schema (XSD) anlegen.

Damit haben wir's auch schon - die Artikel werden ausgeben. Das Ganze sieht dann im Browser wie folgt aus:

Das Verschönern des Outputs überlasse ich Ihnen als Fingerübung.

Schlußbemerkung

Heute habe ich gezeigt, wie das Auslesen von XML unter .NET funktioniert, verglichen zu Code aus ASP und dem MSXML Parser. Obwohl wir nur wenige der vielen Klassen gestreift haben, können Sie bereits mit einfachen Ausgaben beginnen.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20001117.zip

Verwandte Artikel

Arbeiten mit dem SQL Server XML View Mapper
http:/www.aspheute.com/artikel/20020416.htm
Auslesen von XML Dateien mit dem DOM
http:/www.aspheute.com/artikel/20000417.htm
C# XML-Kommentare — Dokumentation von selbst
http:/www.aspheute.com/artikel/20020730.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.