Construirea arborelui
Construirea arborelui
Construirea arborelui este a doua etapă de analiză: consumă fluxul tokenizer-ului și construiește DOM-ul conform algoritmului standard — inclusiv comportamentele sale celebre de recuperare din erori. parse_html() învelește întregul flux într-un singur apel; TreeBuilder expune mecanismul.
Analiză cu un singur apel
parse_html() trece de la textul markup la un arbore finalizat; parse_fragment() aplică algoritmul fragmentului asupra unui element de context. Ambele conduc aceleași interne TreeBuilder prin TreeBuilder.run().
Moduri de inserare și elemente deschise
InsertionMode modelează mașina de moduri a algoritmului, cu StackOfOpenElements și TemplateInsertionModeStack urmărind starea construcției exact așa cum descrie specificația.
Recuperare din erori
Elementele de formatare neînscrise corect se rezolvă prin run_adoption_agency_algorithm() — algoritmul agenției de adopție al standardului — și ActiveFormattingList urmărește elementele de formatare active. get_foster_parent_location() implementează foster parenting pentru conținutul de tabel plasat greșit.
Quirks și conținut străin
determine_quirks_mode() clasifică documentele în funcție de doctype. Conținutul SVG și MathML trece prin adjust_svg_attributes(), adjust_mathml_attributes() și adjust_foreign_attributes(), cu puncte de integrare detectate de is_html_integration_point() și is_mathml_text_integration_point().
Sfaturi și bune practici
- Folosiți
parse_html()cu excepția cazului în care aveți nevoie în mod specific de introspecție a stării de construcție - Utilizați
parse_fragment()cu elementul de context potrivit — regulile de parsare a fragmentelor depind de el - Când depanați arbori surprinzători cauzati de markup incorect, comportamentele de agenție de adopție și foster-parenting sunt de obicei explicația, nu un bug
Probleme comune
| Problemă | Cauză | Remediere |
|---|---|---|
| Conținutul tabelului mutat în afara tabelului | Promovarea adoptării conținutului plasat greșit | Corectarea imbricării markup-ului sursă |
| Tag-urile de formatare duplicate în output | Reconstrucția agenției de adopție | Comportament așteptat conform standardelor pentru imbricare incorectă |
| Documentul se redă în modul quirks | Doctype lipsă sau învechit | Verifică determine_quirks_mode() pe intrare |
FAQ
De ce markup-ul defectuos produce un arbore valid?
Algoritmul standard definește recuperarea pentru fiecare caz de eroare — TreeBuilder implementează acele căi în loc să le declanșeze.
Ce este algoritmul agenției de adopție?
Procedura standard pentru repararea elementelor de formatare cu imbricare incorectă; expusă ca run_adoption_agency_algorithm().
Constructorul gestionează SVG și MathML?
Da — atributele de conținut străin se ajustează prin funcțiile dedicate adjust_*_attributes() cu detectarea integration-point a standardelor.
API Reference Rezumat
| Clasă/Metodă | Descriere: |
|---|---|
parse_html | Markup în arbore într-un singur apel |
parse_fragment | Analiză sintactică a algoritmului de fragment |
TreeBuilder.run | Rulează construirea arborelui |
InsertionMode | Mașină în modul algoritmic |
run_adoption_agency_algorithm | Reparare a imbricării incorecte |
determine_quirks_mode | Clasificare a particularităților bazate pe Doctype |