HTML ตัวแยกโทเคน

HTML Tokenizer

ตัวแยกโทเค็นเป็นขั้นตอนแรกของการพาร์ส HTML: มันแปลงข้อความมาร์คอัปเป็นสตรีมของโทเค็นที่กำหนดโดยมาตรฐาน. มันเป็น API สาธารณะ, ดังนั้นเครื่องมือที่สนใจโทเค็นมากกว่าต้นไม้ — ลินท์เตอร์, การผ่านล่วงหน้าของ sanitizer, ไฮไลท์ไวยากรณ์ — สามารถรับสตรีมนี้โดยตรง.


การแยกโทเค็นมาร์คอัป

Tokenizer.tokenize() ประมวลผลอินพุตทั้งหมด; Tokenizer.tokenize_fragment() ใช้กฎการแยกโทเค็นของส่วนย่อย. ทั้งสองส่งออกคำศัพท์โทเค็นมาตรฐาน.

คลาสโทเค็น

แต่ละโทเค็นเป็นอ็อบเจ็กต์ที่มีประเภท: StartTagToken และ EndTagToken สำหรับแท็ก (พร้อมแอตทริบิวต์), CharacterToken สำหรับข้อความ, CommentToken, DoctypeToken, และ EofToken ระบุจุดสิ้นสุดของอินพุต.

สถานะ Tokenizer

TokenizerState จำลองเครื่องสถานะมาตรฐาน — สถานะเดียวกับที่สเปคกำหนดไว้ — และ Tokenizer.set_state() ทำให้ผู้เรียกแบบ fragment และแบบตามบริบทเริ่มต้นในสถานะที่ถูกต้อง.

อ้างอิงอักขระ

อ้างอิงอักขระแบบตั้งชื่อและเชิงตัวเลขจะถูกแก้ไขผ่าน resolve_named_char_ref(), resolve_numeric_char_ref() และ find_named_char_ref_match() — ตารางอ้างอิงแบบตั้งชื่อเต็มรูปแบบ ไม่ใช่ชุดย่อยแบบลัด.


เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุด

  • ใช้ tokenize_fragment() พร้อมสถานะเริ่มต้นที่ถูกต้องเมื่อทำการแยกโทเคนเนื้อหาที่จะปรากฏภายในองค์ประกอบเฉพาะ
  • ถือว่า EofToken เป็นสัญญาณจบที่แน่นอน แทนที่จะทำให้ตัววนซ้ำหมดโดยการโยนข้อยกเว้น
  • สำหรับตัวทำความสะอาด ให้ตรวจสอบแอตทริบิวต์ของ StartTagToken ในระดับโทเคน ก่อน ที่จะสร้างต้นไม้ใด ๆ

ปัญหาทั่วไป

ปัญหาสาเหตุแก้ไข
เนื้อหา script/style ถูกแยกโทเคนเป็น markupสถานะเริ่มต้นที่ไม่ถูกต้องสำหรับ contextตั้งค่า TokenizerState ที่เหมาะสมผ่าน set_state()
Entities ปรากฏว่าไม่ได้รับการแก้ไขการใช้ข้อความดิบโดยไม่มีการแก้ไข reference resolutionใช้ฟังก์ชันตัวแก้ไขอักขระอ้างอิง
ผลลัพธ์ของส่วนแตกต่างจากการแยกวิเคราะห์เต็มกฎของส่วนถูกตั้งใจให้แตกต่างใช้ tokenize() สำหรับเอกสารเต็ม

FAQ

ฉันสามารถใช้ตัวแยกโทเคนโดยไม่ต้องสร้างต้นไม้ได้หรือไม่?

ใช่ — สตรีมโทเคนเป็นผลลัพธ์สาธารณะที่ทำงานแยกอิสระ.

สถานะของตัวแยกโทเคนเป็นมาตรฐานหรือไม่?

TokenizerState สะท้อนเครื่องจักรสถานะของสเปคและสามารถตั้งค่าได้ผ่าน set_state().

การอ้างอิงอักขระที่ตั้งชื่อถูกจัดการอย่างไร?

ผ่าน resolve_named_char_ref() และ find_named_char_ref_match() กับตารางอ้างอิงที่ตั้งชื่อเต็มรูปแบบ.


API Reference สรุป

คลาส/เมธอดคำอธิบาย
Tokenizer.tokenizeทำการแยกโทเคนอินพุตทั้งหมด
Tokenizer.tokenize_fragmentแยกโทเคนด้วยกฎส่วนย่อย
Tokenizer.set_stateตั้งค่าสถานะเริ่มต้นของ tokenizer
StartTagTokenโทเคนแท็กเริ่มต้นพร้อมแอตทริบิวต์
TokenizerStateมาตรฐานสถานะของเครื่องสถานะ
resolve_named_char_refแก้ไขการอ้างอิงอักขระที่ตั้งชื่อ

ดูเพิ่มเติม

 ภาษาไทย