Построение дерева

Построение дерева

Построение дерева — это второй этап парсинга: он потребляет поток токенизатора и создает 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 реализует эти пути, а не генерирует исключения.

Что такое алгоритм adoption agency?

Процедура стандарта по исправлению неправильно вложенных элементов форматирования; представлена как run_adoption_agency_algorithm().

Поддерживает ли сборщик SVG и MathML?

Да — атрибуты внешнего контента настраиваются через специализированные функции adjust_*_attributes() с обнаружением точек интеграции стандартов.


API Reference Сводка

Класс/МетодОписание:
parse_htmlРазметка в дерево за один вызов
parse_fragmentПарсинг алгоритма фрагмента
TreeBuilder.runЗапуск построения дерева
InsertionModeМашина режима алгоритма
run_adoption_agency_algorithmИсправление неправильного вложения
determine_quirks_modeКлассификация quirks-режима на основе Doctype

См. также:

 Русский