HTML Bộ phân tích từ

HTML Bộ phân tích từ

Trình tách token là giai đoạn đầu tiên của quá trình phân tích HTML: nó chuyển đổi văn bản markup thành một luồng các token được định nghĩa theo tiêu chuẩn. Nó là API công cộng, vì vậy các công cụ quan tâm đến token hơn là cây — các trình kiểm tra cú pháp, các bước tiền xử lý làm sạch, các bộ tô sáng cú pháp — có thể tiêu thụ luồng này trực tiếp.


Tách Token Markup

Tokenizer.tokenize() xử lý toàn bộ đầu vào; Tokenizer.tokenize_fragment() áp dụng các quy tắc tách token cho đoạn. Cả hai đều phát ra từ vựng token chuẩn.

Các lớp Token

Mỗi token là một đối tượng có kiểu: StartTagToken và EndTagToken cho thẻ (kèm thuộc tính), CharacterToken cho văn bản, CommentToken, DoctypeToken, và EofToken đánh dấu kết thúc đầu vào.

Các trạng thái Tokenizer

TokenizerState mô phỏng máy trạng thái tiêu chuẩn — cùng các trạng thái mà đặc tả đặt tên — và Tokenizer.set_state() cho phép các đoạn và người gọi nhạy cảm ngữ cảnh bắt đầu ở trạng thái đúng.

Tham chiếu ký tự

Các tham chiếu ký tự có tên và số được giải quyết thông qua resolve_named_char_ref(), resolve_numeric_char_ref() và find_named_char_ref_match() — bảng tham chiếu có tên đầy đủ, không phải một tập hợp rút gọn.


Mẹo và Thực tiễn tốt nhất

  • Sử dụng tokenize_fragment() với trạng thái khởi đầu đúng khi phân tích token nội dung sẽ xuất hiện bên trong một phần tử cụ thể
  • Xem EofToken như tín hiệu kết thúc cuối cùng thay vì làm cạn iterator bằng ngoại lệ
  • Đối với các bộ làm sạch, kiểm tra các thuộc tính StartTagToken ở mức token trước khi xây dựng bất kỳ cây nào

Các vấn đề thường gặp

Vấn đềNguyên nhânSửa lỗi
Nội dung script/style được tách thành markupSai trạng thái ban đầu cho ngữ cảnhĐặt TokenizerState phù hợp thông qua set_state()
Các thực thể xuất hiện chưa được giải quyếtTiêu thụ văn bản thô mà không giải quyết tham chiếuSử dụng các hàm giải quyết char-ref
Đầu ra fragment khác với phân tích toàn bộQuy tắc fragment cố ý khác nhauSử dụng tokenize() cho tài liệu đầy đủ

FAQ

Tôi có thể sử dụng bộ tokenizer mà không xây dựng cây không?

Có — luồng token là đầu ra công khai, độc lập.

Các trạng thái của tokenizer có phải là các trạng thái tiêu chuẩn không?

TokenizerState phản chiếu máy trạng thái của đặc tả và có thể được đặt qua set_state().

Các tham chiếu ký tự có tên được xử lý như thế nào?

Thông qua resolve_named_char_ref() và find_named_char_ref_match() dựa trên bảng tham chiếu ký tự có tên đầy đủ.


API Reference Tóm tắt

Lớp/Phương thứcMô tả
Tokenizer.tokenizeTokenize toàn bộ đầu vào
Tokenizer.tokenize_fragmentToken hoá theo quy tắc fragment
Tokenizer.set_stateĐặt trạng thái tokenizer ban đầu
StartTagTokenToken thẻ bắt đầu với các thuộc tính
TokenizerStateCác trạng thái của máy trạng thái tiêu chuẩn
resolve_named_char_refGiải quyết một tham chiếu ký tự có tên

Xem thêm

 Tiếng Việt