Budowanie drzewa

Budowa drzewa

Budowa drzewa jest drugim etapem parsowania: konsumuje strumień tokenizera i buduje DOM zgodnie z algorytmem standardu — włącznie z jego słynnymi zachowaniami odzyskiwania po błędach. parse_html() otacza cały potok w jednym wywołaniu; TreeBuilder udostępnia mechanizm.


Parsowanie w jednym wywołaniu

parse_html() przechodzi od tekstu znaczników do gotowego drzewa; parse_fragment() stosuje algorytm fragmentu względem elementu kontekstowego. Oba sterują tymi samymi mechanizmami TreeBuilder poprzez TreeBuilder.run().

Tryby wstawiania i otwarte elementy

InsertionMode modeluje maszynę trybów algorytmu, a StackOfOpenElements i TemplateInsertionModeStack śledzą stan konstrukcji dokładnie tak, jak opisuje specyfikacja.

Odzyskiwanie po błędach

Elementy formatowania nieprawidłowo zagnieżdżone są rozwiązywane przy pomocy run_adoption_agency_algorithm() — algorytmu agencji adopcyjnej standardu — oraz ActiveFormattingList śledzi aktywne elementy formatowania. get_foster_parent_location() wdraża foster parenting dla nieprawidłowo umieszczonych treści tabeli.

Quirks i zawartość obca

determine_quirks_mode() klasyfikuje dokumenty na podstawie ich doctype. Treść SVG i MathML przechodzi przez adjust_svg_attributes(), adjust_mathml_attributes() i adjust_foreign_attributes(), a punkty integracji są wykrywane przez is_html_integration_point() i is_mathml_text_integration_point().


Wskazówki i najlepsze praktyki

  • Sięgnij po parse_html(), chyba że konkretnie potrzebujesz introspekcji stanu konstrukcji
  • Używaj parse_fragment() z odpowiednim elementem kontekstu — reguły parsowania fragmentu zależą od niego
  • Podczas debugowania zaskakujących drzew wynikających z błędnego markupu, zachowania agencji adopcyjnej i foster-parentingu są zazwyczaj wyjaśnieniem, a nie bugiem

Typowe problemy

ProblemPrzyczynaNaprawa
Zawartość tabeli przeniesiona poza tabelęWspieranie rodzicielstwa nieprawidłowo umieszczonej treściNapraw zagnieżdżenie znaczników źródłowych
Tagi formatowania zduplikowane w wyjściuRekonstrukcja agencji adopcyjnejOczekiwane zachowanie standardów przy nieprawidłowym zagnieżdżaniu
Dokument renderuje się w trybie quirksBrakujący lub przestarzały doctypeSprawdź determine_quirks_mode() na wejściu

FAQ

Dlaczego nieprawidłowy markup tworzy prawidłowe drzewo?

Algorytm standardowy definiuje odzyskiwanie dla każdego przypadku błędu — TreeBuilder implementuje te ścieżki zamiast podnosić wyjątek.

Czym jest algorytm agencji adopcyjnej?

Procedura standardowa naprawiająca nieprawidłowo zagnieżdżone elementy formatowania; udostępniona jako run_adoption_agency_algorithm().

Czy konstruktor obsługuje SVG i MathML?

Tak — atrybuty obcej treści są dostosowywane za pomocą dedykowanych funkcji adjust_*_attributes() z wykrywaniem punktu integracji standardów.


API Reference Podsumowanie

Klasa/MetodaOpis
parse_htmlMarkup do drzewa w jednym wywołaniu
parse_fragmentFragment parsowania algorytmu
TreeBuilder.runBudowa drzewa uruchomieniowego
InsertionModeMaszyna trybu algorytmu
run_adoption_agency_algorithmNaprawa nieprawidłowego zagnieżdżenia
determine_quirks_modeKlasyfikacja trybu quirks oparta na Doctype

Zobacz także

 Polski