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