Costruzione dell'albero
Costruzione dell’albero
La costruzione dell’albero è la seconda fase di parsing: consuma lo stream del tokenizer e costruisce il DOM secondo l’algoritmo standard — includendo i suoi famosi comportamenti di recupero dagli errori. parse_html() avvolge l’intera pipeline in una singola chiamata; TreeBuilder espone il meccanismo.
Parsing a una sola chiamata
parse_html() passa dal testo markup a un albero completato; parse_fragment() applica l’algoritmo del frammento su un elemento di contesto. Entrambi guidano gli stessi internals di TreeBuilder via TreeBuilder.run().
Modalità di inserimento e elementi aperti
InsertionMode modella la macchina delle modalità dell’algoritmo, con StackOfOpenElements e TemplateInsertionModeStack che tracciano lo stato di costruzione esattamente come descritto nella specifica.
Recupero dagli errori
Gli elementi di formattazione annidati in modo errato vengono risolti tramite run_adoption_agency_algorithm() — l’algoritmo dell’agenzia di adozione dello standard — e ActiveFormattingList tiene traccia degli elementi di formattazione attivi. get_foster_parent_location() implementa il foster parenting per i contenuti di tabella fuori posto.
Quirks e contenuti esterni
determine_quirks_mode() classifica i documenti in base al loro doctype. I contenuti SVG e MathML passano attraverso adjust_svg_attributes(), adjust_mathml_attributes() e adjust_foreign_attributes(), con i punti di integrazione rilevati da is_html_integration_point() e is_mathml_text_integration_point().
Suggerimenti e migliori pratiche
- Utilizza
parse_html()a meno che tu non abbia bisogno specificamente dell’introspezione dello stato di costruzione. - Usa
parse_fragment()con l’elemento di contesto corretto — le regole di parsing dei frammenti dipendono da esso. - Durante il debug di alberi sorprendenti causati da markup errato, i comportamenti del meccanismo di adozione e del foster-parenting sono solitamente la spiegazione, non un bug.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
| Contenuto della tabella spostato al di fuori della tabella | Accudimento del contenuto fuori posto | Correggere l’annidamento del markup di origine |
| Tag di formattazione duplicati nell’output | Ricostruzione dell’agenzia di adozione | Comportamento previsto dagli standard per l’annidamento errato |
| Il documento viene visualizzato in modalità quirks | Doctype mancante o obsoleto | Verifica determine_quirks_mode() sull’input |
FAQ
Perché il markup malformato produce un albero valido?
L’algoritmo standard definisce il recupero per ogni caso di errore — TreeBuilder implementa quei percorsi invece di sollevare un’eccezione.
Qual è l’algoritmo dell’agenzia per l’adozione?
La procedura standard per riparare gli elementi di formattazione annidati in modo errato; resa disponibile come run_adoption_agency_algorithm().
Il costruttore gestisce SVG e MathML?
Sì — gli attributi di contenuto esterno si adattano tramite le funzioni dedicate adjust_*_attributes() con rilevamento dei punti di integrazione degli standard.
API Reference Riepilogo
| Classe/Metodo | Descrizione |
|---|---|
parse_html | Markup in albero in una sola chiamata |
parse_fragment | Analisi dell’algoritmo di frammenti |
TreeBuilder.run | Costruzione dell’albero di esecuzione |
InsertionMode | Macchina in modalità algoritmo |
run_adoption_agency_algorithm | Correzione di annidamento errato |
determine_quirks_mode | Classificazione delle quirks basata su Doctype |