HTML Tokenizáló
HTML Tokenizáló
A tokenizáló a HTML elemzés első szakasza: átalakítja a markup szöveget egy, a szabványok által definiált tokenek áramlátá. Ez publikus API, így azok az eszközök, amelyek a tokenekre fókuszálnak a fák helyett — linterek, szanitizer előfeldolgozások, szintaxiskiemelők — közvetlenül felhasználhatják az áramlatot.
Markup tokenizálása
Tokenizer.tokenize() teljes bemenetet dolgoz fel; Tokenizer.tokenize_fragment() töredék tokenizálási szabályokat alkalmaz. Mindkettő a szabványos token szókincset bocsátja ki.
Token osztályok
Minden token egy típusos objektum: StartTagToken és EndTagToken címkékhez (attribútumokkal), CharacterToken szöveghez, CommentToken, DoctypeToken és EofToken a bemenet végét jelölik.
Tokenizáló állapotok
TokenizerState modellezi a szabvány állapotgépét — ugyanazokat az állapotokat, amelyeket a specifikáció megnevez — és Tokenizer.set_state() lehetővé teszi, hogy a fragment és kontextusérzékeny hívók a megfelelő állapotból induljanak.
Karakterhivatkozások
A névvel és számmal ellátott karakterhivatkozások a resolve_named_char_ref(), resolve_numeric_char_ref() és find_named_char_ref_match() segítségével kerülnek feloldásra — a teljes névreferencia-táblán keresztül, nem egy rövidített részhalmazon.
Tippek és bevált gyakorlatok
- Használd a
tokenize_fragment()-t a megfelelő kezdeti állapottal, amikor olyan tartalmat tokenizálsz, amely egy adott elemben jelenik meg. - Kezeld a
EofToken-t a végső befejezési jelzésként, ahelyett, hogy kivétellel kimerítenéd az iterátort. - A szanitizálók számára vizsgáld meg a
StartTagTokenattribútumokat token szinten, mielőtt bármilyen fa felépülne.
Gyakori problémák
| Probléma | Ok | Javítás |
|---|---|---|
| A script/stílus tartalom tokenizálódik jelölőként | Helytelen kezdeti állapot a kontextushoz | Állítsa be a megfelelő TokenizerState a set_state() segítségével |
| Az entitások feloldatlanul jelennek meg | Nyers szöveg fogyasztása hivatkozás feloldás nélkül | Használja a char-ref feloldó függvényeket |
| A töredék kimenete eltér a teljes feldolgozástól | A fragmentum szabályok szándékosan eltérnek | Használja a tokenize() értéket a teljes dokumentumokhoz |
FAQ
Használhatom a tokenizert anélkül, hogy fát építenék?
Igen — a token stream egy nyilvános, önálló kimenet.
A tokenizáló állapotok a szabványosak?
TokenizerState tükrözi a specifikáció állapotgépét, és beállítható a set_state() segítségével.
Hogyan kezelik a névvel ellátott karakterhivatkozásokat?
A resolve_named_char_ref() és find_named_char_ref_match() segítségével a teljes név szerint definiált hivatkozástáblán.
API Reference Összefoglaló
| Osztály/Módszer | Leírás |
|---|---|
Tokenizer.tokenize | Tokenizálja a teljes bemenetet |
Tokenizer.tokenize_fragment | Tokenizálja fragmentum szabályokkal |
Tokenizer.set_state | Állítsa be a kezdeti tokenizáló állapotot |
StartTagToken | Kezdőcímke token attribútumokkal |
TokenizerState | A szabványok állapotgép állapotai |
resolve_named_char_ref | Neves karakterhivatkozás feloldása |