Работа с 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 | Фильтрованный обход в порядке документа |