XmlLab01 - Xml-Dateien einlesen und anzeigen

Written on September 03, 2007

In Gesprächen mit anderen Entwicklern und vor allem Einsteigern in .NET zeigt sich immer wieder, dass Xml noch immer relativ stiefmütterlich behandelt wird. Dabei wird uns gerade in Xml in der Zukunft noch häufiger begegnen - sei es in Form von RSS-Feeds oder in OpenXml-Dokumenten von Microsoft.

Deshalb werde ich hier in loser Folge zunächst Grundlagen, später weiterführende Themen zur Verarbeitung von Xml mit .NET veröffentlichen, wobei die Beiträge jeweils bewußt kurz gehalten sein werden. Der vorgestellte Code wird jeweils zum Download verfügbar sein.

Der erste Teil beschäftigt sich mit dem Einlesen von bestehenden Xml-Dokumenten und deren Anzeige, genauer geht es um dieses Xml-Dokument:

<?xml version="1.0" encoding="utf-8" ?>
<books>
  <book>
    <title>Professional ASP.NET 2.0 Security, Membership, and Role Management</title>    
    <author>Stefan Schackow</author>
    <isbn>0764596985</isbn>
    <price>41,37</price>
    <sold>105123</sold>
  </book>
  <book>
    <title>Professional Web Parts and Custom Controls with ASP.NET 2.0</title>
    <author>Peter Vogel</author>
    <isbn>076457860X</isbn>
    <price>39,95</price>
    <sold>75234</sold>
  </book>
</books>

XmlDocument

Dreh- und Angelpunkt der Bearbeitung von Xml in .NET ist die Klasse XmlDocument, welche sich im Namespace System.Xml befindet. Das Laden von bestehenden Xml-Dateien geschieht über die Load-Methode einer Instanz der XmlDocument-Klasse:

XmlDocument document = new XmlDocument();
document.Load("Resources/Books.xml");

Um das geladene Dokument nun wieder auf der Konsole ausgeben zu lassen, ist folgender Code notwendig:

using (XmlTextWriter writer =
    new XmlTextWriter(Console.Out)) {
    writer.Formatting = Formatting.Indented;
    document.Save(writer);
}

Der XmlTextWriter stellt einen Writer zur Generierung von Streams oder Dateien zur Verfügung. Ein Konstruktor des XmlTextWriters erzeugt eine Instanz mithilfe eines System.IO.TextWriters. Bei Console.Out (dem Standard-Output-Stream der Konsole) handelt es sich genau um einen solchen TextWriter.

Über die Formatting-Eigenschaft kann festgelegt werden, wie das ausgegebene Xml-Dokument formatiert werden soll. Formatting.Indented gibt hierbei an, dass die Einrückungen des Xml-Dokuments dargestellt werden sollen.

Über die Save-Methode der XmlDocument-Klasse wird das Xml-Dokument dann an den XmlTextWriter übergeben, welcher seinerseits die Ausgabe in den Output-Stream der Konsole umleitet - that's it.

XmlDocument in ASP.NET ausgeben

Um das XmlDocument in einer ASP.NET-Webseite auszugeben, ist der folgende Code notwendig:

protected void Page_Load(object sender, EventArgs e) {
    Response.ContentType = "text/xml";
    XmlDocument document = new XmlDocument();
    document.Load(Server.MapPath("Resources/Books.xml"));
    using (XmlTextWriter writer =
        new XmlTextWriter(Response.Output)) {
        writer.Formatting = Formatting.Indented;
        document.Save(writer);
    }
    Response.End();
}

Im Gegensatz zum Code zur Ausgabe des Dokuments auf der Konsole, wird als Output-Stream nicht Console.Out (weil es die in ASP.NET schlichtweg nicht gibt), sonder Response.Output verwendet, wobei Response.Output den Standard-Output-Stream von ASP.NET darstellt.

Weiterhin sind noch folgende Statements notwendig:

Response.ContentType = "text/xml" gibt den HTTP-ContentTyp für Xml-Dokumente an, da der Standard-Typ "text/HTML" lautet.

Response.End beendet die Bearbeitung des aktuellen Scripts und gibt den aktuellen Inhalt aus.

Code-Download: XmlLab01.zip XmlLab01Web.zip