Wie man den HTML Tokenizer in Python verwendet
Der Tokenizer in Aspose.HTML FOSS für Python wandelt Markup in einen Strom von standarddefinierten Tokens um — nützlich für Linter, Sanitizer-Vorläufe und jedes Werkzeug, das Markup unterhalb der Baumebene untersucht. Dieser Leitfaden behandelt die Tokenisierungs-Einstiegspunkte, das Token-Vokabular und die Zustände und verwendet pip für die Installation.
Schritt-für-Schritt-Anleitung
Schritt 1: Paket installieren
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Schritt 2: Erforderliche Klassen importieren
from aspose_html.tokenizer import Tokenizer, TokenizerStateSchritt 3: Markup tokenisieren
Tokenizer.tokenize() verarbeitet die gesamte Eingabe; Tokenizer.tokenize_fragment() wendet Fragmentregeln an. Der Stream enthält typisierte Token: StartTagToken und EndTagToken (mit Attributen), CharacterToken für Text, CommentToken, DoctypeToken und ein abschließendes EofToken.
Schritt 4: Steuere den Anfangszustand
TokenizerState spiegelt die Zustandsmaschine der Spezifikation. Für kontextabhängige Eingaben – Inhalte, die innerhalb von <script> oder <style> erscheinen würden – setze den passenden Anfangszustand mit Tokenizer.set_state() vor dem Tokenisieren.
Schritt 5: Auflösen von Zeichenreferenzen
Benannte und numerische Zeichenreferenzen werden über resolve_named_char_ref(), resolve_numeric_char_ref() und find_named_char_ref_match() aufgelöst – unterstützt durch die vollständige benannte Referenztabelle.
Häufige Probleme und Lösungen
Script- oder Style-Inhalt wird als Markup tokenisiert. Der Anfangszustand war für den Kontext falsch; setze ihn mit set_state().
Entitäten erscheinen in der Ausgabe ungelöst. Verbraucher von Rohtext müssen die Zeichenreferenz-Auflöser ausführen; die Auflösung ist auf dieser Ebene explizit.
Fragmentausgabe unterscheidet sich von einer vollständigen Analyse. Fragment-Tokenisierungsregeln unterscheiden sich bewusst — verwende tokenize() für vollständige Dokumente.
Häufig gestellte Fragen
Kann ich Tokens konsumieren, ohne einen Baum zu erstellen?
Ja — der Token-Strom ist ein öffentliches Ergebnis, unabhängig von der Baumkonstruktion.
Welche Token-Typen existieren?
StartTagToken, EndTagToken, CharacterToken, CommentToken, DoctypeToken und EofToken.
Sind die Tokenizer-Zustände die Standard-Zustände?
Ja — TokenizerState modelliert den Zustandsautomaten der Spezifikation.