Работа с DOM

Работа с DOM

Слой DOM моделирует страницу HTML как дерево типизированных узлов. Document является точкой входа и фабрикой узлов; Element и Node осуществляют манипуляцию и обход API.


Создание узлов

Document.create_element(), create_text_node(), create_comment() и create_document_fragment() создают узлы; append_child() присоединяет их:

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() и remove_attribute() управляют атрибутами разметки; Attr и NamedNodeMap предоставляют их в виде объектов:

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)

Операции с деревом

Node предоставляет структурный набор инструментов: insert_before(), remove_child(), replace_child(), clone_node() и contains(), а также аксессоры child_nodes, parent_node и first_child и text_content для текста поддерева. get_root_node() и has_child_nodes() отвечают на структурные вопросы напрямую.

Поиск и обход

Document.get_element_by_id() извлекает элементы по id. NodeList и HTMLCollection содержат наборы результатов; NodeIterator и TreeWalker (с NodeFilter) обходят поддеревья в порядке документа.

Наблюдение за изменениями

MutationObserver фиксирует изменения дерева как записи MutationRecord, отражая стандартный шаблон наблюдателя для реагирования на структурные правки.


Советы и лучшие практики

  • Создавайте каждый узел через владеющий Document — узлы имеют область действия документа; используйте Document.import_node() или adopt_node(), чтобы переместить их между документами.
  • Отдавайте предпочтение text_content для получения текста всего поддерева вместо ручного управления узлами Text.
  • Используйте DocumentFragment для сборки пакетов узлов перед единственным append_child()
  • Проверьте has_attribute() перед get_attribute(), когда отсутствие атрибута имеет значение

Типичные проблемы

ПроблемаПричинаИсправление
Узел отображается в неправильном документеУзел создан другим DocumentСначала переместите его с помощью import_node() или adopt_node()
Поиск атрибута не возвращает ничегоАтрибут никогда не устанавливается для элементаОхранять с has_attribute()
Текст поддерева пустЧтение text_content до присоединения дочерних элементовПрисоедините дочерние элементы, затем читайте

FAQ

Какой класс создает новые элементы?

Document — его метод create_element() является фабрикой элементов, а также есть соседние фабрики для текста, комментариев и фрагментов.

Как переместить поддерево между двумя документами?

Используйте Document.import_node() для копирования или adopt_node() для переноса, затем присоедините с помощью append_child().

Есть ли наблюдатель API для изменений дерева?

Да — MutationObserver поставляет MutationRecord пакеты, описывающие структурные и атрибутные изменения.


API Reference Сводка

Класс/МетодОписание:
Document.create_elementСоздать узел элемента
Document.get_element_by_idНайти элемент по id
Element.set_attributeУстановить атрибут разметки
Node.insert_beforeВставить узел перед дочерним элементом-ссылкой
Node.clone_nodeСкопировать узел или поддерево
MutationObserverОтслеживать изменения дерева
TreeWalkerФильтрованный обход в порядке документа

См. также:

 Русский