Praca z DOM
Overview
Warstwa DOM modeluje stronę HTML jako drzewo typowanych węzłów. Document jest punktem wejścia i fabryką węzłów; Element i Node przeprowadzają manipulację i przeglądanie API.
Tworzenie węzłów
Document.create_element(), create_text_node(), create_comment() i create_document_fragment() tworzą węzły; append_child() je dołącza:
from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
doc.append_child(el)Attributes
Element.set_attribute(), get_attribute(), has_attribute() i remove_attribute() zarządzają atrybutami znaczników; Attr i NamedNodeMap udostępniają je jako obiekty:
from aspose_html.dom import Document
doc = Document()
el = doc.create_element("div")
el.set_attribute("class", "foo")
el.set_attribute("id", "bar")
doc.append_child(el)Operacje na drzewie
Node dostarcza zestaw narzędzi strukturalnych: insert_before(), remove_child(), replace_child(), clone_node() i contains(), a także child_nodes, parent_node i first_child akcesory oraz text_content do tekstu poddrzewa. get_root_node() i has_child_nodes() odpowiadają bezpośrednio na pytania strukturalne.
Wyszukiwanie i przeglądanie
Document.get_element_by_id() pobiera elementy według id. NodeList i HTMLCollection przechowują zestawy wyników; NodeIterator i TreeWalker (z NodeFilter) przeglądają poddrzewa w kolejności dokumentu.
Obserwowanie mutacji
MutationObserver rejestruje zmiany drzewa jako wpisy MutationRecord, odzwierciedlając standardowy wzorzec obserwatora do reagowania na edycje strukturalne.
Wskazówki i najlepsze praktyki
- Twórz każdy węzeł za pośrednictwem właściciela
Document— węzły mają zakres dokumentu; użyjDocument.import_node()lubadopt_node(), aby przenieść je między dokumentami. - Preferuj
text_contentdo tekstu całego poddrzewa zamiast ręcznego manipulowania węzłamiText. - Użyj
DocumentFragment, aby złożyć partie węzłów przed pojedynczymappend_child() - Sprawdź
has_attribute()przedget_attribute(), gdy brakujący atrybut ma znaczenie
Typowe problemy
| Problem | Przyczyna | Naprawa |
|---|---|---|
| Węzeł pojawia się w niewłaściwym dokumencie | Węzeł utworzony przez inny Document | Przenieś go najpierw przy użyciu import_node() lub adopt_node() |
| Wyszukiwanie atrybutu nie zwraca nic | Atrybut nigdy nie został ustawiony na elemencie | Zabezpiecz przy użyciu has_attribute() |
| Tekst poddrzewa jest pusty | Odczytywanie text_content przed dołączeniem dzieci | Dołącz dzieci, a potem odczytaj |
FAQ
Która klasa tworzy nowe elementy?
Document — jej metoda create_element() jest fabryką elementów, z pokrewnymi fabrykami dla tekstu, komentarzy i fragmentów.
Jak przenieść poddrzewo między dwoma dokumentami?
Użyj Document.import_node(), aby skopiować lub adopt_node(), aby przenieść, a następnie dołącz przy użyciu append_child().
Czy istnieje obserwator API dla zmian w drzewie?
Tak — MutationObserver dostarcza partie MutationRecord opisujące zmiany strukturalne i atrybutów.
API Reference Podsumowanie
| Klasa/Metoda | Opis |
|---|---|
Document.create_element | Utwórz węzeł elementu |
Document.get_element_by_id | Wyszukaj element po id |
Element.set_attribute | Ustaw atrybut znaczników |
Node.insert_before | Wstaw węzeł przed referencyjnym dzieckiem |
Node.clone_node | Skopiuj węzeł lub poddrzewo |
MutationObserver | Obserwuj mutacje drzewa |
TreeWalker | Filtrowane przechodzenie w kolejności dokumentu |