Trabalhando com o DOM
Trabalhando com o DOM
A camada DOM modela uma página HTML como uma árvore de nós tipados. Document é o ponto de entrada e fábrica de nós; Element e Node realizam a manipulação e a travessia API.
Criando Nós
Document.create_element(), create_text_node(), create_comment() e create_document_fragment() produzem nós; append_child() os anexa:
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() e remove_attribute() gerenciam atributos de marcação; Attr e NamedNodeMap os expõem como objetos:
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)Operações de Árvore
Node fornece o conjunto de ferramentas estruturais: insert_before(), remove_child(), replace_child(), clone_node() e contains(), além dos acessores child_nodes, parent_node e first_child e text_content para texto de subárvore. get_root_node() e has_child_nodes() respondem diretamente a perguntas estruturais.
Busca e Percurso
Document.get_element_by_id() recupera elementos por id. NodeList e HTMLCollection mantêm conjuntos de resultados; NodeIterator e TreeWalker (com NodeFilter) percorrem subárvores na ordem do documento.
Observando Mutações
MutationObserver registra alterações da árvore como entradas MutationRecord, espelhando o padrão clássico de observador para reagir a edições estruturais.
Dicas e Melhores Práticas
- Crie cada nó através do
Documentproprietário — os nós têm escopo de documento; useDocument.import_node()ouadopt_node()para movê-los entre documentos. - Prefira
text_contentpara texto de subárvore inteira em vez de manipular manualmente nósText. - Use
DocumentFragmentpara montar lotes de nós antes de um únicoappend_child() - Verifique
has_attribute()antes deget_attribute()quando um atributo ausente for significativo
Problemas Comuns
| Problema | Causa | Correção |
|---|---|---|
| Nó aparece no documento errado | Nó criado por um Document diferente | Mova-o com import_node() ou adopt_node() primeiro |
| A pesquisa de atributo não retorna nada | Atributo nunca definido no elemento | Proteja com has_attribute() |
| O texto da subárvore está vazio | Lendo text_content antes de anexar os filhos | Anexe os filhos, depois leia |
FAQ
Qual classe cria novos elementos?
Document — seu método create_element() é a fábrica de elementos, com fábricas irmãs para texto, comentários e fragmentos.
Como mover uma subárvore entre dois documentos?
Use Document.import_node() para copiar ou adopt_node() para transferir, então anexe com append_child().
Existe um observador API para alterações de árvore?
Sim — MutationObserver entrega lotes MutationRecord descrevendo alterações estruturais e de atributos.
API Reference Resumo
| Classe/Método | Descrição |
|---|---|
Document.create_element | Criar um nó de elemento |
Document.get_element_by_id | Localizar um elemento por id |
Element.set_attribute | Defina um atributo de marcação |
Node.insert_before | Inserir um nó antes de um filho de referência |
Node.clone_node | Copiar um nó ou subárvore |
MutationObserver | Observar mutações da árvore |
TreeWalker | Travessia filtrada em ordem de documento |