Werken met de DOM
Overview
De DOM-laag modelleert een HTML pagina als een boom van getypeerde knooppunten. Document is het toegangspunt en knooppuntfabriek; Element en Node voeren de manipulatie en traversal API uit.
Nodes maken
Document.create_element(), create_text_node(), create_comment() en create_document_fragment() produceren nodes; append_child() voegt ze toe:
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() en remove_attribute() beheren markup-attributen; Attr en NamedNodeMap stellen ze beschikbaar als objecten:
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)Boomoperaties
Node levert de structurele toolkit: insert_before(), remove_child(), replace_child(), clone_node() en contains(), plus de child_nodes, parent_node en first_child accessors en text_content voor subboomtekst. get_root_node() en has_child_nodes() beantwoorden structurele vragen direct.
Opzoeken en Traverseren
Document.get_element_by_id() haalt elementen op basis van id op. NodeList en HTMLCollection bevatten resultaatsverzamelingen; NodeIterator en TreeWalker (met NodeFilter) doorlopen subbomen in documentvolgorde.
Mutaties observeren
MutationObserver registreert boomwijzigingen als MutationRecord invoer, waarbij het standaard observer-patroon wordt nagebootst voor het reageren op structurele bewerkingen.
Tips en best practices
- Maak elke knoop aan via de eigenaar-
Document— knopen hebben document-scope; gebruikDocument.import_node()ofadopt_node()om ze tussen documenten te verplaatsen - Geef de voorkeur aan
text_contentvoor volledige subboomtekst boven handmatigTextknoopmanipulatie - Gebruik
DocumentFragmentom batches van knooppunten samen te stellen vóór een enkeleappend_child() - Controleer
has_attribute()vóórget_attribute()wanneer een ontbrekend attribuut betekenisvol is
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
| Knooppunt verschijnt in het verkeerde document | Knooppunt gecreëerd door een andere Document | Verplaats het eerst met import_node() of adopt_node() |
| Attribuutopzoeking geeft niets terug | Attribuut nooit ingesteld op het element | Bescherm met has_attribute() |
| Subtree-tekst is leeg | Lezen van text_content voordat kinderen zijn gekoppeld | Voeg kinderen toe, lees daarna |
FAQ
Welke klasse creëert nieuwe elementen?
Document — zijn create_element()-methode is de fabriek voor elementen, met verwante fabrieken voor tekst, opmerkingen en fragmenten.
Hoe verplaats ik een subboom tussen twee documenten?
Gebruik Document.import_node() om te kopiëren of adopt_node() om over te dragen, en koppel vervolgens met append_child().
Is er een observer API voor boomwijzigingen?
Ja — MutationObserver levert MutationRecord batches die structurele en attribuutwijzigingen beschrijven.
API Reference Samenvatting
| Klasse/Methode | Beschrijving |
|---|---|
Document.create_element | Maak een elementknoop |
Document.get_element_by_id | Zoek een element op id |
Element.set_attribute | Stel een markup-attribuut in |
Node.insert_before | Voeg een node in vóór een referentie-child |
Node.clone_node | Kopieer een node of subboom |
MutationObserver | Observeer boommutaties |
TreeWalker | Gefilterde doorloop in documentvolgorde |