Xây dựng cây
Xây dựng Cây
Xây dựng cây là giai đoạn phân tích thứ hai: nó tiêu thụ luồng của tokenizer và xây dựng DOM theo thuật toán tiêu chuẩn — bao gồm các hành vi phục hồi lỗi nổi tiếng của nó. parse_html() gói toàn bộ pipeline trong một lời gọi; TreeBuilder phô bày cơ chế.
Phân tích Một Lần Gọi
parse_html() chuyển từ văn bản đánh dấu sang một cây hoàn chỉnh; parse_fragment() áp dụng thuật toán fragment đối với một phần tử ngữ cảnh. Cả hai đều điều khiển cùng các nội bộ TreeBuilder thông qua TreeBuilder.run().
Chế Độ Chèn và Các Phần Tử Mở
InsertionMode mô hình hoá máy trạng thái của thuật toán, với StackOfOpenElements và TemplateInsertionModeStack theo dõi trạng thái xây dựng một cách chính xác như mô tả trong đặc tả.
Phục hồi lỗi
Các phần tử định dạng lồng nhau sai được giải quyết thông qua run_adoption_agency_algorithm() — thuật toán adoption agency của tiêu chuẩn — và ActiveFormattingList theo dõi các phần tử định dạng đang hoạt động. get_foster_parent_location() thực hiện foster parenting cho nội dung bảng bị đặt sai vị trí.
Quirks và Nội dung Ngoại
determine_quirks_mode() phân loại tài liệu dựa trên doctype của chúng. Nội dung SVG và MathML đi qua adjust_svg_attributes(), adjust_mathml_attributes(), và adjust_foreign_attributes(), với các điểm tích hợp được phát hiện bởi is_html_integration_point() và is_mathml_text_integration_point().
Mẹo và Thực hành Tốt nhất
- Hãy sử dụng
parse_html()trừ khi bạn cần kiểm tra trạng thái xây dựng một cách cụ thể - Sử dụng
parse_fragment()cùng với phần tử ngữ cảnh phù hợp — các quy tắc phân tích cú pháp đoạn phụ thuộc vào nó - Khi gỡ lỗi các cây bất ngờ do markup kém, các hành vi adoption agency và foster-parenting thường là nguyên nhân, không phải là lỗi
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Khắc phục |
|---|---|---|
| Nội dung bảng được di chuyển ra ngoài bảng | Nuôi dưỡng nội dung bị đặt sai vị trí | Sửa cấu trúc lồng nhau của markup nguồn |
| Thẻ định dạng bị trùng lặp trong đầu ra | Tái cấu trúc cơ quan nhận nuôi | Hành vi tiêu chuẩn mong đợi cho việc lồng nhau sai |
| Tài liệu hiển thị ở chế độ quirks | Thiếu hoặc doctype cũ | Kiểm tra determine_quirks_mode() trên đầu vào |
FAQ
Tại sao markup bị lỗi lại tạo ra một cây hợp lệ?
Thuật toán tiêu chuẩn xác định cách khôi phục cho mọi trường hợp lỗi — TreeBuilder thực hiện các đường dẫn đó thay vì phát sinh lỗi.
Thuật toán adoption agency là gì?
Quy trình của chuẩn để sửa chữa các phần tử định dạng bị lồng sai; được công khai dưới dạng run_adoption_agency_algorithm().
Trình xây dựng có hỗ trợ SVG và MathML không?
Có — các thuộc tính nội dung ngoại vi được điều chỉnh qua các hàm adjust_*_attributes() chuyên dụng cùng với việc phát hiện điểm tích hợp của tiêu chuẩn.
API Reference Tóm tắt
| Lớp/Phương thức | Mô tả |
|---|---|
parse_html | Markup thành cây trong một lần gọi |
parse_fragment | Phân tích thuật toán fragment |
TreeBuilder.run | Xây dựng cây chạy |
InsertionMode | Máy chế độ thuật toán |
run_adoption_agency_algorithm | Sửa lỗi lồng nhau sai |
determine_quirks_mode | Phân loại quirks dựa trên Doctype |