Construção de Árvore

Construção da Árvore

A construção da árvore é a segunda fase de análise: consome o fluxo do tokenizador e constrói o DOM de acordo com o algoritmo padrão — incluindo seus famosos comportamentos de recuperação de erros. parse_html() envolve todo o pipeline em uma única chamada; TreeBuilder expõe a mecânica.


Análise em Uma Chamada

parse_html() passa do texto marcado para uma árvore finalizada; parse_fragment() aplica o algoritmo de fragmento a um elemento de contexto. Ambos acionam os mesmos internos de TreeBuilder via TreeBuilder.run().

Modos de Inserção e Elementos Abertos

InsertionMode modela a máquina de modos do algoritmo, com StackOfOpenElements e TemplateInsertionModeStack rastreando o estado de construção exatamente como a especificação descreve.

Recuperação de Erros

Elementos de formatação mal aninhados são resolvidos por meio de run_adoption_agency_algorithm() — o algoritmo da agência de adoção do padrão — e ActiveFormattingList rastreia os elementos de formatação ativos. get_foster_parent_location() implementa a criação em berço para conteúdo de tabela fora do lugar.

Quirks e Conteúdo Estrangeiro

determine_quirks_mode() classifica documentos a partir de seu doctype. O conteúdo SVG e MathML passa por adjust_svg_attributes(), adjust_mathml_attributes() e adjust_foreign_attributes(), com pontos de integração detectados por is_html_integration_point() e is_mathml_text_integration_point().


Dicas e Melhores Práticas

  • Utilize parse_html() a menos que você precise especificamente de introspecção do estado de construção
  • Use parse_fragment() com o elemento de contexto correto — as regras de análise de fragmentos dependem dele
  • Ao depurar árvores inesperadas resultantes de marcação defeituosa, os comportamentos do mecanismo de adoção e da criação em berço geralmente são a explicação, não um bug

Problemas Comuns

ProblemaCausaCorreção
Conteúdo da tabela movido para fora da tabelaAdoção de conteúdo fora de lugarCorrigir o aninhamento da marcação de origem
Tags de formatação duplicadas na saídaReconstrução de agência de adoçãoComportamento esperado dos padrões para aninhamento incorreto
Documento é renderizado no modo quirksDoctype ausente ou legadoVerifique determine_quirks_mode() na entrada

FAQ

Por que marcação malformada produz uma árvore válida?

O algoritmo de padrões define a recuperação para cada caso de erro — TreeBuilder implementa esses caminhos ao invés de gerar exceções.

Qual é o algoritmo da agência de adoção?

O procedimento padrão para reparar elementos de formatação dispostos incorretamente; exposto como run_adoption_agency_algorithm().

O construtor lida com SVG e MathML?

Sim — os atributos de conteúdo externo são ajustados por meio das funções dedicadas adjust_*_attributes() com detecção de ponto de integração dos padrões.


API Reference Resumo

Classe/MétodoDescrição
parse_htmlMarkup para árvore em uma única chamada
parse_fragmentAnálise de fragmento de algoritmo
TreeBuilder.runConstrução da árvore de execução
InsertionModeMáquina de modo de algoritmo
run_adoption_agency_algorithmReparo de aninhamento incorreto
determine_quirks_modeClassificação de quirks baseada em Doctype

Ver também

 Português