Làm việc với DOM
Làm việc với DOM
Lớp DOM mô hình hoá một trang HTML như một cây các nút có kiểu. Document là điểm vào và nhà máy tạo nút; Element và Node thực hiện việc thao tác và duyệt API.
Tạo Nút
Document.create_element(), create_text_node(), create_comment(), và create_document_fragment() tạo ra các nút; append_child() gắn chúng:
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(), và remove_attribute() quản lý các thuộc tính đánh dấu; Attr và NamedNodeMap phơi bày chúng dưới dạng đối tượng:
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)Các thao tác trên cây
Node cung cấp bộ công cụ cấu trúc: insert_before(), remove_child(), replace_child(), clone_node(), và contains(), cộng với các child_nodes, parent_node, và first_child accessor và text_content cho văn bản subtree. get_root_node() và has_child_nodes() trả lời các câu hỏi cấu trúc một cách trực tiếp.
Tra cứu và Duyệt
Document.get_element_by_id() lấy các phần tử theo id. NodeList và HTMLCollection giữ các tập hợp kết quả; NodeIterator và TreeWalker (với NodeFilter) duyệt các subtree theo thứ tự tài liệu.
Quan sát các biến đổi
MutationObserver ghi lại các thay đổi cây dưới dạng các mục MutationRecord, phản chiếu mẫu quan sát chuẩn để phản hồi các chỉnh sửa cấu trúc.
Mẹo và Thực hành tốt nhất
- Tạo mọi nút thông qua
Documentsở hữu — các nút có phạm vi tài liệu; sử dụngDocument.import_node()hoặcadopt_node()để di chuyển chúng giữa các tài liệu - Ưu tiên
text_contentcho văn bản toàn bộ subtree hơn việc tự độngTextcác nút - Sử dụng
DocumentFragmentđể tập hợp các lô nút trước mộtappend_child()duy nhất - Kiểm tra
has_attribute()trướcget_attribute()khi thuộc tính thiếu có ý nghĩa
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Khắc phục |
|---|---|---|
| Nút xuất hiện trong tài liệu sai | Nút được tạo bởi một Document khác | Di chuyển nó bằng import_node() hoặc adopt_node() trước |
| Tra cứu thuộc tính không trả về gì | Thuộc tính chưa bao giờ được đặt trên phần tử | Bảo vệ bằng has_attribute() |
| Văn bản cây con trống | Đọc text_content trước khi các nút con được gắn | Gắn các nút con, sau đó đọc |
FAQ
Lớp nào tạo các phần tử mới?
Document — phương thức create_element() của nó là nhà máy cho các phần tử, cùng với các nhà máy phụ cho văn bản, chú thích và đoạn.
Làm thế nào để di chuyển một cây con giữa hai tài liệu?
Sử dụng Document.import_node() để sao chép hoặc adopt_node() để chuyển, sau đó gắn kết bằng append_child().
Có trình quan sát API cho các thay đổi cây không?
Yes — MutationObserver cung cấp các lô MutationRecord mô tả các thay đổi về cấu trúc và thuộc tính.
Tóm tắt API Reference
| Lớp/Phương thức | Mô tả |
|---|---|
Document.create_element | Tạo một nút phần tử |
Document.get_element_by_id | Tìm kiếm một phần tử theo id |
Element.set_attribute | Đặt một thuộc tính markup |
Node.insert_before | Chèn một nút trước một nút con tham chiếu |
Node.clone_node | Sao chép một nút hoặc một cây con |
MutationObserver | Quan sát các biến đổi của cây |
TreeWalker | Duyệt theo thứ tự tài liệu đã lọc |