TOC

This article has been localized into German by the community.

XML:

XML mit der XmlDocument-Klasse einlesen

Wie im vorherigen Kapitel beschrieben, verbraucht die XmlDocument-Methodik mehr Speicherplatz und ist möglicherweise ein bisschen langsamer, als die XmlReader-Methodik. Jedoch ist die XmlDocument-Methodik in einigen Fällen einfacher zu benutzen, und sie benötigt oft weniger Code. Wenn der XML-Inhalt erst einmal gelesen wurde, kannst du Daten auf hierarchische Art lesen, so wie die XML-Struktur, mit einem Stammelement, welches untergeordnete Elemente haben kann, usw. Im vorherigen Kapitel haben wir eine XML-Datei von der Europäischen Zentralbank analysiert, welche uns über die momentanen Wechselkurse informieren konnte. Wir werden nun dasselbe tun, aber stattdessen die XmlDocument-Klasse benutzen.

Die XML-Datei kann unter der folgenden URL gefunden werden (http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml). Und die Daten, die wir brauchen, sind in den Elementen. In einer Baumstruktur sieht es etwa so aus :

<gesmes:Envelope>
    [other child nodes]
    <Cube>
<Cube time="2011-04-12">
    <Cube currency="USD" rate="1.4470"/>
    <Cube currency="JPY" rate="121.87"/>
    …

Die gesmes:Envelope ist unser Wurzelelement, auf das wir über die Eigenschaft DocumentElement zugreifen können. Wir können dann auf Kinder dieses Knotens zugreifen, indem wir die ChildNodes-Eigenschaft der Collection verwenden. In unserem Beispiel möchten wir, dass die untergeordneten Knoten drei Ebenen unter dem Element root/document liegen. Wir können das mit dem folgenden Code tun, der im Wesentlichen das gleiche tut wie der XmlReader-basierte Code im vorherigen Kapitel:

using System;
using System.Text;
using System.Xml;

namespace ParsingXml
{
    class Program
    {
static void Main(string[] args)
{
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load("http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml");
    foreach(XmlNode xmlNode in xmlDoc.DocumentElement.ChildNodes[2].ChildNodes[0].ChildNodes)
Console.WriteLine(xmlNode.Attributes["currency"].Value + ": " + xmlNode.Attributes["rate"].Value);
    Console.ReadKey();
}
    }
}

Wie Sie sehen können, greifen wir auf die Cube-Knoten zu, indem wir in der ChildNodes-Hierarchie nach unten gehen. Vom DocumentElement (dem Wurzelelement) fragen wir nach dem dritten Kindknoten (nullindex-basiert), dann fragen wir nach dem ersten Kindknoten davon, und dann nach der gesamten Sammlung von Kindknoten. Dies ist natürlich nur möglich, weil wir die Struktur des XML-Dokuments kennen, und es ist definitiv nicht sehr flexibel, schön oder leicht zu ändern. Die Art und Weise, wie Sie durch ein XML-Dokument navigieren, hängt jedoch stark von der XML-Quelle und den benötigten Daten ab. Für dieses Beispiel funktioniert das oben genannte Verfahren gut und sogar mit einer sehr begrenzten Menge an Code, aber für andere Zwecke können Sie etwas mehr Code verwenden, um die Lesbarkeit zu erhöhen.

Sobald wir einen Knoten mit einem Währungskurs haben, greifen wir auf die beiden Eigenschaften zu, die uns interessieren, und geben sie dann in der Konsole aus, genau wie das Beispiel im vorherigen Kapitel.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!