Fortgeschrittene Verwendung der Parser-Fabrik

(Auszug aus "Python & XML" von Christopher A. Jones & Fred L. Drake, Jr.)

PyXML bietet mehrere Parser und mehrere Wege, sie zu instanziieren, abhängig davon, ob Sie SAX benutzen, versuchen einen DOM-Baum zu bauen oder etwas völlig anderes tun. Die ParserFactory-Klasse, die für portablen Code entworfen wurde, bietet einen SAX-fähigen Parser, der garantiert in Ihrer Laufzeitumgebung verfügbar ist. Zusätzlich können Sie einen Parser (oder SAX-Treiber) explizit erzeugen, indem Sie in irgendein spezielles Paket wie z. B. PyExpat eintauchen. Wir zeigen ein Beispiel für beides, aber normalerweise sollten Sie sich auf die Parser-Fabrik verlassen, um einen Parser zu instanziieren.

Die Funktion make_parser (importiert aus xml.sax) gibt einen SAX-Treiber für den ersten verfügbaren Parser in der Liste zurück, die Sie angeben, oder sie gibt einen verfügbaren Parser zurück, wenn keine Liste angegeben wird oder wenn die Liste Parser enthält, die nicht gefunden oder geladen werden können. Die Funktion make_parser stammt aus der Klasse xml.sax.saxexts.ParserFactory, aber es ist besser, die Methode aus xml.sax zu importieren (mehr darüber später). Zum Beispiel:

from xml.sax import make_parser
parser = make_parser( )

Beim Schreiben dieser Zeilen gilt, daß (wenn Sie PyXML installiert haben) ein Aufruf von make_parser ohne Argument garantiert einen PyExpat- oder xmlproc-Treiber zurückgibt. Wenn Sie in den Quellen des Moduls xml.sax wühlen, werden Sie sehen, daß diese Liste an die ParserFactory-Klasse übergeben wird. Wenn Sie eine Parser-Fabrik direkt aus xml.sax.saxexts instanziieren, müssen Sie sicher sein, eine Liste zu übergeben, die den Namen mindestens eines gültigen Parsers enthält, sonst wird sie keinen Parser erzeugen können:

>>> from xml.sax.saxexts import ParserFactory
>>> p = ParserFactory( )
>>> parser = p.make_parser( )
Traceback (most recent call last):
    File "<stdin>", line 1, in ?
    File "/usr/local/lib/python2.0/site-packages/_xmlplus/sax/saxexts.py",
        line 77, in make_parser
      raise SAXReaderNotAvailable("No parsers found", None)
xml.sax._exceptions.SAXReaderNotAvailable: No parsers found

Wenn Sie eine Liste von Parsern oder Treibern angeben, bekommen Sie, was Sie suchen:

>>> from xml.sax.saxexts import ParserFactory
>>> p = ParserFactory(["xml.sax.drivers.drv_pyexpat"])
>>> parser = p.make_parser( )

In den meisten Fällen ist es eine gute Idee, die Funktion make_parser aus xml.sax zu benutzen, aber es ist auch hilfreich, wenn Sie wissen, was unter der Haube vor sich geht. Es sind mehrere Fabrikklassen mit Variationen für HTML-, SGML-, nicht-validierende und validierende XML-Parser verfügbar.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Python & XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2002 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Python & XML" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de