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
| Problem | Przyczyna | Naprawa |
|---|---|---|
| Zawartość tabeli przeniesiona poza tabelę | Wspieranie rodzicielstwa nieprawidłowo umieszczonej treści | Napraw zagnieżdżenie znaczników źródłowych |
| Tagi formatowania zduplikowane w wyjściu | Rekonstrukcja agencji adopcyjnej | Oczekiwane zachowanie standardów przy nieprawidłowym zagnieżdżaniu |
| Dokument renderuje się w trybie quirks | Brakujący lub przestarzały doctype | Sprawdź 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/Metoda | Opis |
|---|---|
parse_html | Markup do drzewa w jednym wywołaniu |
parse_fragment | Fragment parsowania algorytmu |
TreeBuilder.run | Budowa drzewa uruchomieniowego |
InsertionMode | Maszyna trybu algorytmu |
run_adoption_agency_algorithm | Naprawa nieprawidłowego zagnieżdżenia |
determine_quirks_mode | Klasyfikacja trybu quirks oparta na Doctype |