Spass mit SAX in VB6

Kombinieren wir nun all diese Komponenten zu einem Beispiel. Ich habe unseren alten Bekannten, den Buchkatalog, so umgeschrieben, dass er anstelle von DOM nun SAX verwendet. Die Anwendung wurde stark vereinfacht, damit man sich besser auf die Funktionsweise von SAX konzentrieren kann: Ich habe die Funktionen ‚New Book‘ und ‚Edit Book‘ entfernt. Der Quellcode für dieses Projekt steht zum Download bereit; er beinhaltet eine Kopie von catalog.xml, dem XML-Buchkatalog, den die Anwendung parst und in einer Baumstruktur darstellt. Abbildung A zeigt die Anwendung bei der Arbeit.


Abbildung A: Die SAX-Musteranwendung bei der Arbeit.

Der erste Schritt bei der Erstellung einer SAX-Client-Anwendung ist die Implementierung des Content-Handler-Interfaces IVBSAXContentHandler. In Listing A befindet sich der Code für cSaxReader, der das Interface sowohl für den Content-Handler als auch für den Error-Handler implementiert.

Betrachten wir zuerst den Content-Handler. Man sieht, dass ich die Methoden startDocument, startElement, characters und endElement implementiert habe. Die Aufgabe der Methode startDocument besteht einfach nur darin, die Collection Class zuzuweisen, die die Bücher im Katalog hält, sobald SAX mit dem Parsen eines neuen Dokuments beginnt. Die eigentliche Arbeit wird durch die Methoden startElement und characters erledigt. Erstere speichert den Namen des aktuellen Elements, strLocalName, in einer Variablen auf Modulebene, damit characters beim späteren Zugriff auf die Daten des Elements diese Daten einer geeigneten Class-Property für das Buch zuweisen kann. Wird ein Element mit dem Namen „book“ an startElement übergeben, findet diese Methode die ID-Nummer des Buchs, indem sie das ID-Attribut aus dem Parameter oAttributes (eine Instanz von IVBSAXAttributes) entnimmt. Wird schließlich endElement aufgerufen, verwirft diese Methode den Namen des aktuellen Elements und setzt eine Boolesche Flagge, die anzeigt, ob das Parsen eines Buchs beendet wurde oder nicht. Damit wird vermieden, dass characters die vom Parser zwischen den Elementen gefundenen Leerräume unnötigerweise verarbeitet.

Wie bereits erwähnt, ist die Implementierung eines Error-Handler-Objekts reichlich redundant, denn fatale Parsing-Fehler werden offensichtlich in jedem Fall als abfangbare Fehler zurück an die Client-Anwendung gegeben. Allerdings ist ein implementierter Error-Handler sehr wohl in der Lage, zu bestimmen, an welcher Stelle im Dokument der Fehler aufgetreten ist. Dies lässt sich bewerkstelligen, indem man die Eigenschaften lineNumber und columnNumber der IVBSAXLocator-Instanz untersucht, die an die Methode fatalError des Handlers übergeben wird. Dies erledige ich in der Methode fatalError von cSaxReader.

Nachdem der Content-Handler und der Error-Handler eingerichtet sind, braucht man den Parser nur noch an die Arbeit zu schicken: indem man die Methode parse oder parseURL von SAXXMLReader aufruft.

Page: 1 2 3

ZDNet.de Redaktion

Recent Posts

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…

2 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…

3 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.

3 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…

3 Tagen ago

So günstig & effizient war Content Produktion noch nie: Neues Content System erobert deutschen Markt

Kontinuierliche Content Produktion und Markenaufbau sind essentieller Pfeiler von langfristigen Unternehmenserfolg. Das ist mittlerweile auch…

3 Tagen ago

Lenovo übertrifft die Erwartungen und hebt Prognose an

KI-Funktionen beschleunigen die Erholung des PC-Markts. Der Nettogewinn legt um 44 Prozent zu, der Umsatz…

4 Tagen ago