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ânKhắc phục
Nội dung bảng được di chuyển ra ngoài bảngNuô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 raTái cấu trúc cơ quan nhận nuôiHành vi tiêu chuẩn mong đợi cho việc lồng nhau sai
Tài liệu hiển thị ở chế độ quirksThiế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ứcMô tả
parse_htmlMarkup thành cây trong một lần gọi
parse_fragmentPhân tích thuật toán fragment
TreeBuilder.runXây dựng cây chạy
InsertionModeMáy chế độ thuật toán
run_adoption_agency_algorithmSửa lỗi lồng nhau sai
determine_quirks_modePhân loại quirks dựa trên Doctype

Xem thêm

 Tiếng Việt