xml.sax.xmlreader — Interface für XML-Parser¶
Quellcode: Lib/xml/sax/xmlreader.py
SAX-Parser implementieren die XMLReader-Schnittstelle. Sie werden in einem Python-Modul implementiert, das eine Funktion create_parser() bereitstellen muss. Diese Funktion wird von xml.sax.make_parser() ohne Argumente aufgerufen, um ein neues Parser-Objekt zu erstellen.
- class xml.sax.xmlreader.XMLReader¶
Basisklasse, von der SAX-Parser erben können.
- class xml.sax.xmlreader.IncrementalParser¶
In einigen Fällen ist es wünschenswert, eine Eingabequelle nicht auf einmal zu parsen, sondern Teile des Dokuments zu verarbeiten, sobald sie verfügbar sind. Beachten Sie, dass der Reader normalerweise nicht die gesamte Datei liest, sondern sie ebenfalls in Teilen liest; trotzdem wird
parse()nicht zurückkehren, bis das gesamte Dokument verarbeitet ist. Daher sollten diese Schnittstellen verwendet werden, wenn das blockierende Verhalten vonparse()unerwünscht ist.Wenn der Parser instanziiert wird, ist er sofort bereit, Daten von der `feed`-Methode zu akzeptieren. Nachdem das Parsen mit einem Aufruf von `close` abgeschlossen wurde, muss die `reset`-Methode aufgerufen werden, um den Parser wieder für die Annahme neuer Daten – entweder von `feed` oder über die `parse`-Methode – vorzubereiten.
Beachten Sie, dass diese Methoden *nicht* während des Parsens aufgerufen werden dürfen, d. h. nachdem `parse` aufgerufen wurde und bevor es zurückkehrt.
Standardmäßig implementiert die Klasse auch die `parse`-Methode der `XMLReader`-Schnittstelle, indem sie die Methoden `feed`, `close` und `reset` der `IncrementalParser`-Schnittstelle als Komfortfunktion für Schreiber von SAX 2.0-Treibern verwendet.
- class xml.sax.xmlreader.Locator¶
Schnittstelle zum Verknüpfen eines SAX-Ereignisses mit einem Dokumentenstandort. Ein Locator-Objekt liefert nur während Aufrufen der DocumentHandler-Methoden gültige Ergebnisse; zu allen anderen Zeiten sind die Ergebnisse unvorhersehbar. Wenn Informationen nicht verfügbar sind, können Methoden
Nonezurückgeben.
- class xml.sax.xmlreader.InputSource(system_id=None)¶
Kapselung der Informationen, die der
XMLReaderzum Lesen von Entitäten benötigt.Diese Klasse kann Informationen über den öffentlichen Bezeichner, den Systembezeichner, den Byte-Stream (möglicherweise mit Informationen zur Zeichenkodierung) und/oder den Zeichen-Stream einer Entität enthalten.
Anwendungen erstellen Objekte dieser Klasse zur Verwendung in der Methode
XMLReader.parse()und zur Rückgabe aus `EntityResolver.resolveEntity`.Ein
InputSourcegehört zur Anwendung; derXMLReaderdarf von der Anwendung übergebeneInputSource-Objekte nicht ändern, obwohl er Kopien erstellen und diese ändern darf.
- class xml.sax.xmlreader.AttributesImpl(attrs)¶
Dies ist eine Implementierung der
Attributes-Schnittstelle (siehe Abschnitt Die Attributes-Schnittstelle). Dies ist ein Dictionary-ähnliches Objekt, das die Elementattribute in einem `startElement()`-Aufruf repräsentiert. Zusätzlich zu den nützlichsten Dictionary-Operationen unterstützt es eine Reihe weiterer Methoden, wie sie von der Schnittstelle beschrieben werden. Objekte dieser Klasse sollten von Lesern instanziiert werden; *attrs* muss ein Dictionary-ähnliches Objekt sein, das eine Zuordnung von Attributnamen zu Attributwerten enthält.
- class xml.sax.xmlreader.AttributesNSImpl(attrs, qnames)¶
Namespace-fähige Variante von
AttributesImpl, die anstartElementNS()übergeben wird. Sie leitet sich vonAttributesImplab, versteht aber Attributnamen als Tupel aus *namespaceURI* und *localname*. Zusätzlich bietet sie eine Reihe von Methoden, die qualifizierte Namen erwarten, wie sie im Originaldokument erscheinen. Diese Klasse implementiert dieAttributesNS-Schnittstelle (siehe Abschnitt Die AttributesNS-Schnittstelle).
XMLReader-Objekte¶
Die XMLReader-Schnittstelle unterstützt die folgenden Methoden
- XMLReader.parse(source)¶
Verarbeitet eine Eingabequelle und erzeugt SAX-Ereignisse. Das *source*-Objekt kann ein Systembezeichner sein (ein String, der die Eingabequelle identifiziert – typischerweise ein Dateiname oder eine URL), ein
pathlib.Path- oder ein pfadähnliches Objekt oder einInputSource-Objekt. Wennparse()zurückkehrt, ist die Eingabe vollständig verarbeitet, und das Parser-Objekt kann verworfen oder zurückgesetzt werden.Geändert in Version 3.5: Unterstützung für Zeichen-Streams hinzugefügt.
Geändert in Version 3.8: Unterstützung für pfadähnliche Objekte hinzugefügt.
- XMLReader.getContentHandler()¶
Gibt den aktuellen
ContentHandlerzurück.
- XMLReader.setContentHandler(handler)¶
Setzt den aktuellen
ContentHandler. Wenn keinContentHandlergesetzt ist, werden Inhaltsereignisse verworfen.
- XMLReader.getDTDHandler()¶
Gibt den aktuellen
DTDHandlerzurück.
- XMLReader.setDTDHandler(handler)¶
Setzt den aktuellen
DTDHandler. Wenn keinDTDHandlergesetzt ist, werden DTD-Ereignisse verworfen.
- XMLReader.getEntityResolver()¶
Gibt den aktuellen
EntityResolverzurück.
- XMLReader.setEntityResolver(handler)¶
Setzt den aktuellen
EntityResolver. Wenn keinEntityResolvergesetzt ist, führen Versuche, eine externe Entität aufzulösen, dazu, dass der Systembezeichner für die Entität geöffnet wird, und schlagen fehl, wenn er nicht verfügbar ist.
- XMLReader.getErrorHandler()¶
Gibt den aktuellen
ErrorHandlerzurück.
- XMLReader.setErrorHandler(handler)¶
Setzt den aktuellen Fehlerbehandler. Wenn kein
ErrorHandlergesetzt ist, werden Fehler als Ausnahmen ausgelöst und Warnungen ausgegeben.
- XMLReader.setLocale(locale)¶
Ermöglicht einer Anwendung, die Locale für Fehler und Warnungen festzulegen.
SAX-Parser sind nicht verpflichtet, die Lokalisierung von Fehlern und Warnungen bereitzustellen; wenn sie die angeforderte Locale jedoch nicht unterstützen, müssen sie eine SAX-Ausnahme auslösen. Anwendungen können mitten im Parsen eine Locale-Änderung anfordern.
- XMLReader.getFeature(featurename)¶
Gibt die aktuelle Einstellung für das Feature *featurename* zurück. Wenn das Feature nicht erkannt wird, wird eine
SAXNotRecognizedExceptionausgelöst. Die bekannten Featurenamen sind im Modulxml.sax.handleraufgeführt.
- XMLReader.setFeature(featurename, value)¶
Setzt *featurename* auf *value*. Wenn das Feature nicht erkannt wird, wird eine
SAXNotRecognizedExceptionausgelöst. Wenn das Feature oder seine Einstellung vom Parser nicht unterstützt wird, wird *SAXNotSupportedException* ausgelöst.
- XMLReader.getProperty(propertyname)¶
Gibt die aktuelle Einstellung für die Property *propertyname* zurück. Wenn die Property nicht erkannt wird, wird eine
SAXNotRecognizedExceptionausgelöst. Die bekannten Propertynamen sind im Modulxml.sax.handleraufgeführt.
- XMLReader.setProperty(propertyname, value)¶
Setzt *propertyname* auf *value*. Wenn die Property nicht erkannt wird, wird eine
SAXNotRecognizedExceptionausgelöst. Wenn die Property oder ihre Einstellung vom Parser nicht unterstützt wird, wird *SAXNotSupportedException* ausgelöst.
IncrementalParser-Objekte¶
Instanzen von IncrementalParser bieten die folgenden zusätzlichen Methoden
- IncrementalParser.feed(data)¶
Verarbeitet einen Datenblock (*data*).
- IncrementalParser.close()¶
Nimmt das Ende des Dokuments an. Dies überprüft wohlgeformte Bedingungen, die nur am Ende überprüft werden können, ruft Handler auf und kann Ressourcen bereinigen, die während des Parsens zugewiesen wurden.
- IncrementalParser.reset()¶
Diese Methode wird nach dem Aufruf von `close` aufgerufen, um den Parser zurückzusetzen, damit er neue Dokumente parsen kann. Die Ergebnisse des Aufrufs von `parse` oder `feed` nach `close` ohne Aufruf von `reset` sind undefiniert.
Locator-Objekte¶
Instanzen von Locator stellen diese Methoden bereit
- Locator.getColumnNumber()¶
Gibt die Spaltennummer zurück, an der das aktuelle Ereignis beginnt.
- Locator.getLineNumber()¶
Gibt die Zeilennummer zurück, an der das aktuelle Ereignis beginnt.
- Locator.getPublicId()¶
Gibt den öffentlichen Bezeichner für das aktuelle Ereignis zurück.
- Locator.getSystemId()¶
Gibt den Systembezeichner für das aktuelle Ereignis zurück.
InputSource-Objekte¶
- InputSource.setPublicId(id)¶
Setzt den öffentlichen Bezeichner dieses
InputSource.
- InputSource.getPublicId()¶
Gibt den öffentlichen Bezeichner dieses
InputSourcezurück.
- InputSource.setSystemId(id)¶
Setzt den Systembezeichner dieses
InputSource.
- InputSource.getSystemId()¶
Gibt den Systembezeichner dieses
InputSourcezurück.
- InputSource.setEncoding(encoding)¶
Setzt die Zeichenkodierung dieses
InputSource.Die Kodierung muss ein String sein, der für eine XML-Kodierungsdeklaration akzeptabel ist (siehe Abschnitt 4.3.3 der XML-Empfehlung).
Das Attribut `encoding` des
InputSourcewird ignoriert, wenn derInputSourceauch einen Zeichen-Stream enthält.
- InputSource.getEncoding()¶
Ruft die Zeichenkodierung dieses InputSource ab.
- InputSource.setByteStream(bytefile)¶
Setzt den Byte-Stream (eine Binärdatei) für diese Eingabequelle.
Der SAX-Parser wird dies ignorieren, wenn auch ein Zeichen-Stream angegeben ist, aber er wird einen Byte-Stream bevorzugen, anstatt selbst eine URI-Verbindung zu öffnen.
Wenn die Anwendung die Zeichenkodierung des Byte-Streams kennt, sollte sie diese mit der Methode `setEncoding` setzen.
- InputSource.getByteStream()¶
Ruft den Byte-Stream für diese Eingabequelle ab.
Die Methode `getEncoding` gibt die Zeichenkodierung für diesen Byte-Stream zurück oder
None, wenn sie unbekannt ist.
- InputSource.setCharacterStream(charfile)¶
Setzt den Zeichen-Stream (eine Textdatei) für diese Eingabequelle.
Wenn ein Zeichen-Stream angegeben ist, ignoriert der SAX-Parser jeden Byte-Stream und versucht nicht, eine URI-Verbindung zum Systembezeichner zu öffnen.
- InputSource.getCharacterStream()¶
Ruft den Zeichen-Stream für diese Eingabequelle ab.
Die Attributes-Schnittstelle¶
Attributes-Objekte implementieren einen Teil des Mapping-Protokolls, einschließlich der Methoden copy(), get(), __contains__(), items(), keys() und values(). Die folgenden Methoden werden ebenfalls bereitgestellt:
- Attributes.getLength()¶
Gibt die Anzahl der Attribute zurück.
- Attributes.getNames()¶
Gibt die Namen der Attribute zurück.
- Attributes.getType(name)¶
Gibt den Typ des Attributs *name* zurück, der normalerweise
'CDATA'ist.
- Attributes.getValue(name)¶
Gibt den Wert des Attributs *name* zurück.
Die AttributesNS-Schnittstelle¶
Diese Schnittstelle ist ein Untertyp der Attributes-Schnittstelle (siehe Abschnitt Die Attributes-Schnittstelle). Alle von dieser Schnittstelle unterstützten Methoden sind auch für AttributesNS-Objekte verfügbar.
Die folgenden Methoden sind ebenfalls verfügbar:
- AttributesNS.getValueByQName(name)¶
Gibt den Wert für einen qualifizierten Namen zurück.
- AttributesNS.getNameByQName(name)¶
Gibt das Tupel *(namespace, localname)* für einen qualifizierten Namen zurück.
- AttributesNS.getQNameByName(name)¶
Gibt den qualifizierten Namen für ein *(namespace, localname)*-Tupel zurück.
- AttributesNS.getQNames()¶
Gibt die qualifizierten Namen aller Attribute zurück.