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

ProblemaCausaCorrezione
Contenuto della tabella spostato al di fuori della tabellaAccudimento del contenuto fuori postoCorreggere l’annidamento del markup di origine
Tag di formattazione duplicati nell’outputRicostruzione dell’agenzia di adozioneComportamento previsto dagli standard per l’annidamento errato
Il documento viene visualizzato in modalità quirksDoctype mancante o obsoletoVerifica 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/MetodoDescrizione
parse_htmlMarkup in albero in una sola chiamata
parse_fragmentAnalisi dell’algoritmo di frammenti
TreeBuilder.runCostruzione dell’albero di esecuzione
InsertionModeMacchina in modalità algoritmo
run_adoption_agency_algorithmCorrezione di annidamento errato
determine_quirks_modeClassificazione delle quirks basata su Doctype

Vedi anche

 Italiano