Construction d'arbre
Construction d’arbre
La construction d’arbre est la deuxième étape d’analyse: elle consomme le flux du tokenizer et construit le DOM selon l’algorithme standard — y compris ses célèbres comportements de récupération d’erreurs. parse_html() encapsule l’ensemble du pipeline en un seul appel; TreeBuilder expose le mécanisme.
Analyse en un appel
parse_html() passe du texte balisé à un arbre fini; parse_fragment() applique l’algorithme de fragment à un élément de contexte. Les deux pilotent les mêmes internes de TreeBuilder via TreeBuilder.run().
Modes d’insertion et éléments ouverts
InsertionMode modèle la machine d’états de l’algorithme, avec StackOfOpenElements et TemplateInsertionModeStack qui suivent l’état de construction exactement comme le décrit la spécification.
Récupération d’erreurs
Les éléments de formatage mal imbriqués sont résolus via run_adoption_agency_algorithm() — l’algorithme de l’agence d’adoption du standard — et ActiveFormattingList suit les éléments de formatage actifs. get_foster_parent_location() implémente le foster-parenting pour le contenu de tableau mal placé.
Quirks et contenu étranger
determine_quirks_mode() classe les documents selon leur doctype. Le contenu SVG et MathML transite par adjust_svg_attributes(), adjust_mathml_attributes() et adjust_foreign_attributes(), les points d’intégration étant détectés par is_html_integration_point() et is_mathml_text_integration_point().
Conseils et bonnes pratiques
- Utilisez
parse_html()sauf si vous avez spécifiquement besoin d’une introspection de l’état de construction - Utilisez
parse_fragment()avec l’élément de contexte approprié — les règles d’analyse des fragments en dépendent - Lors du débogage d’arbres surprenants issus d’un balisage défectueux, le mécanisme d’adoption et les comportements de foster-parenting sont généralement l’explication, et non un bogue
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
| Contenu du tableau déplacé en dehors du tableau | Parrainage de contenu mal placé | Corriger l’imbrication du balisage source |
| Balises de formatage dupliquées dans la sortie | Reconstruction du service d’adoption | Comportement attendu des normes pour les mauvaises imbrications |
| Le document s’affiche en mode quirks | Doctype manquant ou hérité | Vérifier determine_quirks_mode() sur l’entrée |
FAQ
Pourquoi un balisage malformé produit-il un arbre valide?
L’algorithme des normes définit la récupération pour chaque cas d’erreur — TreeBuilder implémente ces chemins plutôt que de lever une exception.
Quel est l’algorithme d’adoption d’agence?
La procédure du standard pour réparer les éléments de formatage mal imbriqués; exposée sous run_adoption_agency_algorithm().
Le constructeur gère-t-il SVG et MathML?
Oui — les attributs de contenu étranger s’ajustent via les fonctions dédiées adjust_*_attributes() avec détection du point d’intégration des normes.
Résumé API Reference
| Classe/Méthode | Description |
|---|---|
parse_html | Balisage en arbre en un seul appel |
parse_fragment | Fragment d’analyse d’algorithme |
TreeBuilder.run | Exécuter la construction d’arbre |
InsertionMode | Machine en mode algorithme |
run_adoption_agency_algorithm | Réparation des imbriquements incorrects |
determine_quirks_mode | Classification des quirks basée sur le Doctype |