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.

SAX-Musteranwendung
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.

Themenseiten: Anwendungsentwicklung, Software

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

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Spass mit SAX in VB6

Kommentar hinzufügen

Schreibe einen Kommentar

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