Побудова дерева
Побудова дерева
Побудова дерева є другим етапом розбору: вона споживає потік токенізатора і створює DOM згідно зі стандартним алгоритмом — включаючи його знамениті механізми відновлення після помилок. parse_html() обгортає весь конвеєр в один виклик; TreeBuilder відкриває механізм.
Парсинг одним викликом
parse_html() переходить від розмітки до готового дерева; parse_fragment() застосовує алгоритм фрагмента до елементу контексту. Обидва керують однаковими внутрішніми механізмами TreeBuilder через TreeBuilder.run().
Режими вставки та відкриті елементи
InsertionMode моделює машину режимів алгоритму, а StackOfOpenElements і TemplateInsertionModeStack точно відстежують стан будування, як описано у специфікації.
Відновлення після помилок
Неправильно вкладені елементи форматування вирішуються за допомогою run_adoption_agency_algorithm() — алгоритму агентства прийняття стандарту — і ActiveFormattingList відстежує активні елементи форматування. get_foster_parent_location() реалізує foster parenting для неправильно розташованого вмісту таблиці.
Відхилення та сторонній вміст
determine_quirks_mode() класифікує документи за їх doctype. Вміст SVG та MathML проходить через adjust_svg_attributes(), adjust_mathml_attributes() і adjust_foreign_attributes(), а точки інтеграції виявляються is_html_integration_point() та is_mathml_text_integration_point().
Поради та найкращі практики
- Використовуйте
parse_html(), якщо вам не потрібна інспекція конструкційного стану - Використовуйте
parse_fragment()з правильним елементом контексту — правила розбору фрагментів залежать від нього - При налагодженні несподіваних дерев через погану розмітку, поведінка агентства прийняття та foster-parenting зазвичай є поясненням, а не помилкою
Поширені проблеми
| Проблема | Причина | Виправлення |
|---|---|---|
| Вміст таблиці переміщено за межі таблиці | Опіка над переміщеним вмістом | Виправити вкладення розмітки джерела |
| Теги форматування дублюються у виводі | Реконструкція агентства усиновлення | Очікувана поведінка стандартів щодо неправильного вкладення |
| Документ відображається в режимі quirks | Відсутній або застарілий doctype | Перевірте determine_quirks_mode() у вводі |
FAQ
Чому неправильна розмітка створює коректне дерево?
Алгоритм стандартів визначає відновлення для кожного випадку помилки — TreeBuilder реалізує ці шляхи замість підняття.
Що таке алгоритм агентства прийняття?
Процедура стандарту для виправлення неправильно вкладених елементів форматування; представлена як run_adoption_agency_algorithm().
Чи обробляє будівельник SVG та MathML?
Так — атрибути чужого вмісту коригуються за допомогою спеціальних функцій adjust_*_attributes() з виявленням точок інтеграції стандартів.
API Reference Підсумок
| Клас/Метод | Опис |
|---|---|
parse_html | Розмітка в дерево за один виклик |
parse_fragment | Парсинг фрагментного алгоритму |
TreeBuilder.run | Запуск побудови дерева |
InsertionMode | Алгоритмічний режимний механізм |
run_adoption_agency_algorithm | Виправлення неправильного вкладення |
determine_quirks_mode | Класифікація особливостей на основі Doctype |