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
| Problema | Causa | Correção |
|---|---|---|
| Conteúdo da tabela movido para fora da tabela | Adoção de conteúdo fora de lugar | Corrigir o aninhamento da marcação de origem |
| Tags de formatação duplicadas na saída | Reconstrução de agência de adoção | Comportamento esperado dos padrões para aninhamento incorreto |
| Documento é renderizado no modo quirks | Doctype ausente ou legado | Verifique 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étodo | Descrição |
|---|---|
parse_html | Markup para árvore em uma única chamada |
parse_fragment | Análise de fragmento de algoritmo |
TreeBuilder.run | Construção da árvore de execução |
InsertionMode | Máquina de modo de algoritmo |
run_adoption_agency_algorithm | Reparo de aninhamento incorreto |
determine_quirks_mode | Classificação de quirks baseada em Doctype |