HTML Tokenizer

HTML Tokenizer

Der Tokenizer ist die erste Stufe der HTML-Analyse: Er wandelt Markup-Text in einen Strom von standarddefinierten Tokens um. Er ist öffentlich API, sodass Werkzeuge, die Tokens statt Bäumen interessieren — Linter, Sanitizer-Vorläufe, Syntax-Highlighter — den Strom direkt konsumieren können.


Tokenisierung von Markup

Tokenizer.tokenize() verarbeitet die komplette Eingabe; Tokenizer.tokenize_fragment() wendet Fragment-Tokenisierungsregeln an. Beide erzeugen den Standard-Token-Wortschatz.

Token-Klassen

Jedes Token ist ein typisiertes Objekt: StartTagToken und EndTagToken für Tags (mit Attributen), CharacterToken für Text, CommentToken, DoctypeToken und EofToken markieren das Ende der Eingabe.

Tokenizer-Zustände

TokenizerState modelliert die Statusmaschine der Standards — dieselben Zustände, die die Spezifikation nennt — und Tokenizer.set_state() ermöglicht fragment- und kontextsensitiven Aufrufern, im richtigen Zustand zu starten.

Zeichenreferenzen

Benannte und numerische Zeichenreferenzen werden über resolve_named_char_ref(), resolve_numeric_char_ref() und find_named_char_ref_match() aufgelöst — die vollständige benannte Referenztabelle, nicht ein verkürztes Subset.


Tipps und bewährte Verfahren

  • Verwenden Sie tokenize_fragment() mit dem korrekten Anfangszustand, wenn Sie Inhalte tokenisieren, die innerhalb eines bestimmten Elements erscheinen würden.
  • Betrachten Sie EofToken als das endgültige Endsignal, anstatt den Iterator durch Ausnahmen zu erschöpfen.
  • Für Sanitizer prüfen Sie die StartTagToken-Attribute auf Token-Ebene, bevor ein Baum aufgebaut wird.

Häufige Probleme

ProblemUrsacheLösung
Skript/Style-Inhalt wird als Markup tokenisiertFalscher Anfangszustand für den KontextSetzen Sie das passende TokenizerState über set_state()
Entitäten bleiben ungelöstVerarbeitung von Rohtext ohne ReferenzauflösungVerwenden Sie die Char-Ref-Auflösungsfunktionen
Fragmentausgabe unterscheidet sich vom vollständigen ParsingFragmentregeln unterscheiden sich absichtlichVerwenden Sie tokenize() für vollständige Dokumente

FAQ

Kann ich den Tokenizer verwenden, ohne einen Baum zu bauen?

Ja — der Token-Stream ist eine öffentliche, eigenständige Ausgabe.

Sind die Tokenizer-Zustände die Standardzustände?

TokenizerState spiegelt die Zustandsmaschine der Spezifikation und ist über set_state() einstellbar.

Wie werden benannte Zeichenreferenzen behandelt?

Durch resolve_named_char_ref() und find_named_char_ref_match() anhand der vollständigen benannten Referenztabelle.


API Reference Zusammenfassung

Klasse/MethodeBeschreibung
Tokenizer.tokenizeTokenisieren Sie die komplette Eingabe
Tokenizer.tokenize_fragmentTokenisieren mit Fragmentregeln
Tokenizer.set_stateLegt den anfänglichen Tokenizer-Zustand fest
StartTagTokenStart-Tag-Token mit Attributen
TokenizerStateZustände der Zustandsmaschine nach Standards
resolve_named_char_refEine benannte Zeichenreferenz auflösen

Siehe auch

 Deutsch