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.
Neueste Kommentare
Noch keine Kommentare zu Besseres Parsen von XML-Dokumenten in .NET
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.