Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Unter .NET gibt es verschiedene Methoden und Klassen, mit denen Sie auf die Daten in XML-Dokumenten zugreifen können. Diese nutzen Sie je nach Einsatzzweck. Wenn Sie sehr große Dateien einlesen wollen, bietet sich die XmlReader-Klasse an. Mit dieser durchlaufen Sie das XML-Dokument sequenziell, das heißt, Element für Element. Dieser Artikel zeigt, wie Sie mit den Methoden der XmlReader-Klasse auf die Elemente eines XML-Dokuments zugreifen. Außerdem schauen wir uns an, wie Sie die eingelesen Inhalte in Objekte schreiben können, über die Sie die Inhalte dann in die Tabellen einer Datenbank eintragen.
Wer unter Access/VBA auf XML-Dokumente zugegriffen hat, hat dazu in der Regel das Document Object Model verwendet und dabei die Elemente mit den gewünschten Daten gezielt angesteuert. Unter VBA gibt es noch eine weitere Technik namens SAX. Diese ist recht kompliziert und wird sehr selten verwendet. Dieser Technik kommt der hier verwendete XmlReader jedoch recht nahe. Seine Handhabung ist allerdings einfacher als bei SAX.
Dokument öffnen
Um ein XML-Dokument zu öffnen, benötigen wir ein Objekt auf Basis der XMLReader-Klasse. Diese ist Teil des Namespaces System.XML, den wir mit der folgenden Anweisung etwa in der Code behind-Klasse eines Fensters einer neuen Desktop-Anwendung auf Basis von XAML und VB referenzieren:
Imports System.Xml
Danach können wir auf die XmlReader-Klasse und ihre Elemente zugreifen. Bei der Klasse handelt es sich um eine abstrakte Klasse, das heißt, Sie können diese nicht instanzieren. Wir können aber dennoch eine Objektvariable nutzen, um auf das zu lesende XML-Dokument zuzugreifen. Um ein XML-Dokument zu öffnen, das auf der Festplatte liegt, verwenden Sie die Create-Methode. Dieser übergeben wir den Pfad zu der einzulesenden XML-Datei:
Dim objReader As XmlReader Dim strPfad As String strPfad = "c:\...\Kunden.xml" objReader = XmlReader.Create(strPfad)
Danach befindet sich das XML-Dokument im Zugriff. Wir schauen uns die Funktionsweise der Klasse XmlReader anhand des folgenden XML-Dokuments an:
<xml version="1.0" encoding="utf-8"> <Bestellverwaltung> <!--Auflistung der Kunden--> <Kunden> <Kunde ID="1"> <Firma>André Minhorst Verlag</Firma> <Vorname>André</Vorname> <Nachname>Minhorst</Nachname> <Beschreibung><![CDATA[Beschreibung mit CDATA]]></Beschreibung> </Kunde> <Kunde ID="2"> <Firma>Müller GmbH</Firma> <Vorname>Klaus</Vorname> <Nachname>Müller</Nachname> </Kunde> </Kunden> </Bestellverwaltung>
XML-Dokument sequenziell durchlaufen mit Read
Im Gegensatz zum Durchlaufen einer Textdatei durchlaufen wir hier nicht Zeile für Zeile, sondern Element für Element. Ein Element ist dabei nicht etwa eine Einheit wie
Do While objReader.Read Debug.Print(objReader.NodeType) Loop
Wir durchlaufen also alle Elemente in einer Do While-Schleife, deren Abbruch objReader.Read lautet. Die Read-Methode liefert den Wert True zurück, falls noch ein neues Element eingelesen werden konnte und den Wert False, wenn das Ende des Dokuments erreicht wurde. Das Ergebnis der Ausgabe ist wenig aussagekräftig, denn NodeType liefert einen Zahlenwert (siehe Bild 1).
Bild 1: Elementtypen
Welcher Wert entspricht nun welchem Elementtyp Das können wir uns im Objektkatalog ansehen, wo wir nach der Eigenschaft NodeType suchen und den Eintrag System.Xml.XmlNodeType vorfinden. Beim Anklicken der Elemente zeigt der Dialog auch die Zahlenwerte an, die wir mit denen unserer Ausgabe abgleichen können (siehe Bild 2).
Bild 2: Elementtypen im Objektkatalog