Trabajando con el DOM
Trabajando con el DOM
La capa DOM modela una página HTML como un árbol de nodos tipados. Document es el punto de entrada y fábrica de nodos; Element y Node realizan la manipulación y el recorrido API.
Creando nodos
Document.create_element(), create_text_node(), create_comment() y create_document_fragment() generan nodos; append_child() los adjunta:
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() y remove_attribute() gestionan los atributos de marcado; Attr y NamedNodeMap los exponen 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)Operaciones del árbol
Node suministra el conjunto de herramientas estructurales: insert_before(), remove_child(), replace_child(), clone_node() y contains(), más los accesores child_nodes, parent_node y first_child y text_content para texto de subárbol. get_root_node() y has_child_nodes() responden preguntas estructurales directamente.
Búsqueda y recorrido
Document.get_element_by_id() recupera elementos por id. NodeList y HTMLCollection mantienen conjuntos de resultados; NodeIterator y TreeWalker (con NodeFilter) recorren subárboles en orden de documento.
Observando mutaciones
MutationObserver registra los cambios del árbol como entradas MutationRecord, replicando el patrón de observador estándar para reaccionar a ediciones estructurales.
Consejos y buenas prácticas
- Crea cada nodo a través del
Documentpropietario — los nodos están limitados al documento; usaDocument.import_node()oadopt_node()para moverlos entre documentos - Prefiere
text_contentpara texto de subárbol completo en lugar de manipular manualmente nodosText - Utilice
DocumentFragmentpara ensamblar lotes de nodos antes de un únicoappend_child() - Verifique
has_attribute()antes deget_attribute()cuando un atributo faltante sea significativo
Problemas comunes
| Problema | Causa | Corrección |
|---|---|---|
| El nodo aparece en el documento incorrecto | Nodo creado por un Document diferente | Móvelo con import_node() o adopt_node() primero |
| La búsqueda de atributo no devuelve nada | El atributo nunca se estableció en el elemento | Proteger con has_attribute() |
| El texto del subárbol está vacío | Leyendo text_content antes de adjuntar los hijos | Adjuntar hijos, luego leer |
FAQ
¿Qué clase crea nuevos elementos?
Document — su método create_element() es la fábrica de elementos, con fábricas hermanas para texto, comentarios y fragmentos.
¿Cómo puedo mover un subárbol entre dos documentos?
Utilice Document.import_node() para copiar o adopt_node() para transferir, y luego adjunte con append_child().
¿Existe un observador API para los cambios de árbol?
Sí — MutationObserver entrega lotes MutationRecord que describen cambios estructurales y de atributos.
API Reference Resumen
| Clase/Método | Descripción |
|---|---|
Document.create_element | Crear un nodo de elemento |
Document.get_element_by_id | Buscar un elemento por id |
Element.set_attribute | Establezca un atributo de marcado |
Node.insert_before | Insertar un nodo antes de un hijo de referencia |
Node.clone_node | Copiar un nodo o subárbol |
MutationObserver | Observar mutaciones del árbol |
TreeWalker | Recorrido de orden de documento filtrado |