Besseres Parsen von XML-Dokumenten in .NET

Lassen Sie uns vergleichen, auf welche Weise SAX-Parser und XML-Reader arbeiten. Der Code-Ausschnitt in zeigt etwas Visual Basic-Code, der die SAX-Funktionen der Microsoft MSXML 4.0 COM-Library nutzt.

Was als nächstes passiert, hängt davon ab, wie der Anwender die ContentHandlerImpl-Klasse implementiert, die ihrerseits das IContentHandler-Interface implementiert – nur eines der Interfaces, die vom SAX Specification and Interaction-Modell festgelegt werden. Während des Parsens, das durch Verwendung der parseURL-Methode gestartet wird, werden die Interface-Methoden, wie sie in der ContentHandlerImpl-Klasse festgelegt sind, vom Parser aufgerufen und können dann ihre eigenen Bearbeitungsschritte am gefundenen Knoten ausführen. Um einen Knoten zu verwerfen, muss die Methode nur einen leeren Rückgabewert liefern

In Anlehnung an einen beliebten Filmtitel würde ich sagen, dass dieser Ansatz gute, schlechte und hässliche Seiten hat. Gut ist, dass die Anwendung in zwei separate Komponenten aufgeteilt ist. Schlecht ist, dass eine Menge Daten unnötigerweise zwischen den Komponenten hin- und hergeschickt werden, manchmal nur, um sie sofort zu verwerfen. Und hässlich ist, dass das Schreiben einer SAX-basierten Anwendung eine langweilige Sache ist, da man selbst für die trivialsten Aufgaben eine eigene Klasse erstellen und instantiieren muss.

Bei .NET XML-Readern opfert man im Grunde die positiven Aspekte von SAX-Lösungen, um die schlechten und hässlichen Aspekte zu verbessern. Wie funktioniert das?

Die Anwendung hat die Kontrolle über den Prozess des Parsens und greift direkt auf Knoten zu oder überspringt bestimmte Knoten (siehe ).

Das Programmieren wird einfacher und natürlicher, und man muss sich nicht mit unnötigen Details aufhalten. Anwendung und Parser sind zwar nicht sauber getrennt, aber für das Erstellen spezialisierter Reader-Klassen reicht es aus, von der abstrakten Klasse XmlReader zu erben oder von spezifischeren Klassen wie XmlTextReader.

XML-Reader in .NET

XML-Reader sind eine innovative SAX-ähnliche Art von Parsern, gleichzeitig aber auch ein fundamentaler Baustein für alle XML-Klassen im .NET Framework. So benutzen z.B. XPath-, XSLT- und XMLDOM-Klassen Reader zum Erstellen ihrer eigenen, komplexeren Objekt-Modelle.

Die Unterstützung des .NET Frameworks für Reader anstelle von SAX-Parsern beschneidet Sie keineswegs in Ihrer Programmierkreativität. Wenn Sie ein Fan des SAX-Modells sind, können Sie immer noch ohne Probleme einen SAX-Parser mithilfe eines .NET-Readers implementieren. Dazu muss man eine neue Reader-Klasse erstellen, die für jeden gefundenen Knoten ein zugehöriges Ereignis bereitstellt und dann einen Reader benutzt, um das Dokument zu bearbeiten. Diese Fähigkeit rührt von der prinzipiell größeren Flexibilität des „Pull“-Modells her. Man kann zwar das „Push“-Modell mit „Pull“-Elementen nachbilden, aber man kann aus einem SAX-Parser keinen „Pull“-Parser machen.

Page: 1 2 3

ZDNet.de Redaktion

Recent Posts

Digitale Produkte „cyberfit“ machen

Vernetzte Produkte müssen laut Cyber Resilience Act über Möglichkeiten zur Datenverschlüsselung und Zugangsverwaltung verfügen.

4 Tagen ago

Google schließt schwerwiegende Sicherheitslücken in Chrome 131

Das jüngste Update für Windows, macOS und Linux stopft drei Löcher. Eine Anfälligkeit setzt Nutzer…

5 Tagen ago

Apple schließt Zero-Day-Lücken in iOS, iPadOS und macOS

Zwei von Google-Mitarbeitern entdeckte Schwachstellen werden bereits aktiv gegen Mac-Systeme mit Intel-Prozessoren eingesetzt. Sie erlauben…

5 Tagen ago

Gefährliche Anzeigen für Passwortmanager Bitwarden verbreiten Malware

Die Hintermänner haben es unter anderem auf Daten von Facebook-Geschäftskonten abgesehen. Opfer werden über angebliche…

5 Tagen ago

Public Cloud: Gartner erwartet 2025 weltweite Ausgaben von 723 Milliarden Dollar

Bis 2027 werden 90 Prozent der Unternehmen eine Hybrid-Cloud-Strategie umsetzen.

5 Tagen ago

iPhone 15 ist bestverkauftes Smartphone im dritten Quartal

Apple belegt in der Statistik von Counterpoint die ersten drei Plätze. Samsungs Galaxy S24 schafft…

6 Tagen ago