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 tabeluluiPromovarea adoptării conținutului plasat greșitCorectarea imbricării markup-ului sursă
Tag-urile de formatare duplicate în outputReconstrucția agenției de adopțieComportament așteptat conform standardelor pentru imbricare incorectă
Documentul se redă în modul quirksDoctype lipsă sau învechitVerifică 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_htmlMarkup în arbore într-un singur apel
parse_fragmentAnaliză sintactică a algoritmului de fragment
TreeBuilder.runRulează construirea arborelui
InsertionModeMașină în modul algoritmic
run_adoption_agency_algorithmReparare a imbricării incorecte
determine_quirks_modeClasificare a particularităților bazate pe Doctype

Vezi și:

 Română