Besseres Parsen von XML-Dokumenten in .NET

Die XML-API des .NET Frameworks unterstützt das XML DOM-Modell zum Parsen, nicht aber das SAX-Modell.

SAX ist ein sog. „Push“-Modell. Parser und Client-Anwendung sind zwei separate Programme, wobei die Anwendung eine eher passive Rolle spielt und nur mit einzelnen Knoten und Teilen arbeitet anstatt mit dem Dokument als Ganzes. Die Anwendung ist mit dem Parser verbunden und erhält Benachrichtigungen über alle im bearbeiteten Dokument gefundenen Knoten. Über diese Verbindung kann die Anwendung auch einige allgemeine Informationen darüber übermitteln, an welcher Art von Knoten sie Interesse hat.

Allerdings ist ein solcher Filter statisch und kann keine Knoten nach bestimmten Bedingungen zur Laufzeit auswählen. Eine Anwendung kann den Parser anweisen, nur Content-Knoten zurückzugeben und alle anderen zu verwerfen (z.B. Processing Instructions, Comments und Entities). Um die Knoten mit unbenötigten Elementen herauszufiltern bleibt der Anwendung nichts Anderes übrig, als die zugehörigen Ereignisse zu ignorieren und ebenso alle Informationen, die der SAX-Parser ihr schickt.

Das .NET Framework bietet eine effizientere Methode zum Parsen von XML-Dokumenten, wobei die Daten nur gelesen, nicht zwischengespeichert und nur interessante Daten weitergegeben werden. Die neue Generation von Parsern stellt einen Document Reader zur Verfügung und funktioniert als „Pull“-Modell im Gegensatz zum „Push“-Modell von SAX. Document Reader sind ein verbreitetes Element im .NET Framework und decken unterschiedliche Gebiete ab wie z.B. Datei-Ein- und Ausgabe, Datenbankzugriff und Speicherverwaltung.

Ein XML-Reader ist eine Klasse, die ein Quelldokument Knoten für Knoten durchgeht, wobei sie ausgehend vom Root-Knoten bis zum am weitesten rechts stehenden Blatt des XML-Baums vorgeht, nach dem Prinzip „Node-first“. Der Node-first-Algorithmus schreibt vor, dass der Reader zuerst die Wurzel (Root) eines Subtrees analysiert und rekursiv dessen Kinder in der Reihenfolge ihres Auftretens besucht. Die Reihenfolge des Node-first-Algorithmus entspricht der Reihenfolge, wie die XML-Knoten in einer Datei gespeichert sind.

Architektur des XML-Readers

Im Unterschied zu einem SAX-Parser akzeptiert der .NET XML-Reader direkte Anweisungen von der Anwendung. Die Anwendung hat die Kontrolle über die Reader-Komponente und entscheidet, was und wann gelesen werden soll. Im Prinzip ist das Parsen eines XML-Dokuments eine Schleife, die den Datenstrom von Anfang bis Ende durchgeht. Beim „Push“-Modell hat der Parser die Kontrolle über diese Schleife, die Anwendung ist nur ein mit dem Parser verbundener Client. Beim „Pull“-Modell hat die Anwendung selber die Kontrolle über die Schleifer, und der Parser ist nur ein Hilfs-Tool.

Was ist der Unterschied? Zuerst einmal ist das „Pull“-Modell einfacher einzurichten und flexibler, und der Programm-Code ist leichter lesbar und programmierfreundlicher. Außerdem ist das „Pull“-Modell schneller, da es den Datentransfer zwischen Anwendung und Parser auf ein Minimum reduziert.

Ein SAX-Parser liefert immer Informationen über jeden Knoten an die Anwendung, egal ob die Anwendung diese Information überhaupt angefordert hat. Ein .NET XML-Reader bietet der Anwendung direkte Methoden zum Überspringen von Knoten, so dass keine unnötigen Speicher- oder CPU-Ressourcen gebunden werden.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Besseres Parsen von XML-Dokumenten in .NET

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *