HTML Tokeniserare
HTML Tokeniserare
Tokenizer är det första steget i HTML-parsing: den konverterar markup-text till en ström av standarddefinierade token. Den är offentlig API, så verktyg som bryr sig om token snarare än träd — linters, sanitiserings-förpassar, syntax-markörer — kan konsumera strömmen direkt.
Tokenisering av markup
Tokenizer.tokenize() bearbetar fullständig inmatning; Tokenizer.tokenize_fragment() tillämpar fragment-tokeniseringsregler. Båda avger det standardiserade token-vokabuläret.
Tokenklasser
Varje token är ett typat objekt: StartTagToken och EndTagToken för taggar (med attribut), CharacterToken för text, CommentToken, DoctypeToken och EofToken som markerar slutet på inmatningen.
Tokenizer-tillstånd
TokenizerState modellerar standardens tillståndsmaskin — samma tillstånd som specifikationen namnger — och Tokenizer.set_state() låter fragment- och kontextkänsliga anroparer starta i rätt tillstånd.
Teckenreferenser
Namngivna och numeriska teckenreferenser löses upp via resolve_named_char_ref(), resolve_numeric_char_ref() och find_named_char_ref_match() — den fullständiga tabellen för namngivna referenser, inte en genvägsdelmängd.
Tips och bästa praxis
- Använd
tokenize_fragment()med rätt initiala tillstånd när du tokeniserar innehåll som skulle visas inom ett specifikt element - Behandla
EofTokensom den definitiva avslutsindikatorn snarare än att tömma iteratorn genom undantag - För saneringsverktyg, inspektera
StartTagToken-attribut på token-nivå innan något träd byggs
Vanliga problem
| Problem | Orsak | Åtgärd |
|---|---|---|
| Script/style-innehåll tokeniseras som markup | Fel initialt tillstånd för kontext | Ställ in den lämpliga TokenizerState via set_state() |
| Entiteter verkar olösta | Konsumera råtext utan referensupplösning | Använd char-ref-resolver-funktionerna |
| Fragmentutdata skiljer sig från fullständig parsning | Fragmentregler skiljer sig avsiktligt | Använd tokenize() för fullständiga dokument |
FAQ
Kan jag använda tokeniseraren utan att bygga ett träd?
Ja — tokenströmmen är en offentlig, fristående utdata.
Är tokeniserarens tillstånd standard?
TokenizerState speglar specifikationens tillståndsmaskin och kan ställas in via set_state().
Hur hanteras namngivna teckenreferenser?
Genom resolve_named_char_ref() och find_named_char_ref_match() mot hela tabellen för namngivna referenser.
API Reference Sammanfattning
| Klass/Metod | Beskrivning |
|---|---|
Tokenizer.tokenize | Tokenisera hela indata |
Tokenizer.tokenize_fragment | Tokenisera med fragmentregler |
Tokenizer.set_state | Ställ in tokeniserarens initiala tillstånd |
StartTagToken | Start-tag token med attribut |
TokenizerState | Standardernas tillståndsmaskins tillstånd |
resolve_named_char_ref | Lös upp en namngiven teckenreferens |