HTML Διαχωριστής
HTML Αναλυτής
Ο tokenizer είναι το πρώτο στάδιο της ανάλυσης HTML: μετατρέπει το κείμενο markup σε ροή tokens ορισμένων από πρότυπα. Είναι δημόσιο API, ώστε τα εργαλεία που ενδιαφέρονται για tokens αντί για δέντρα — linters, sanitizer pre-passes, syntax highlighters — να μπορούν να καταναλώνουν την ροή απευθείας.
Ανάλυση σήμανσης
Tokenizer.tokenize() επεξεργάζεται πλήρη είσοδο· Tokenizer.tokenize_fragment() εφαρμόζει κανόνες tokenization τμημάτων. Και οι δύο εκπέμπουν το τυπικό λεξιλόγιο tokens.
Κατηγορίες Token
Κάθε token είναι ένα τυποποιημένο αντικείμενο: StartTagToken και EndTagToken για ετικέτες (με ιδιότητες), CharacterToken για κείμενο, CommentToken, DoctypeToken και EofToken που σηματοδοτούν το τέλος της εισόδου.
Καταστάσεις Αναλυτή
TokenizerState μοντελοποιεί τη μηχανή καταστάσεων των προτύπων — τις ίδιες καταστάσεις που ονομάζει η προδιαγραφή — και Tokenizer.set_state() επιτρέπει σε τμηματικούς και ευαίσθητους στο πλαίσιο καλούντες να ξεκινούν στη σωστή κατάσταση.
Αναφορές Χαρακτήρων
Οι ονομαστικές και αριθμητικές αναφορές χαρακτήρων επιλύονται μέσω του resolve_named_char_ref(), resolve_numeric_char_ref() και find_named_char_ref_match() — του πλήρους πίνακα ονομαστικών αναφορών, όχι ενός υποσυνόλου συντομεύσεων.
Συμβουλές και Καλές Πρακτικές
- Χρησιμοποιήστε το
tokenize_fragment()με τη σωστή αρχική κατάσταση κατά την τμηματοποίηση περιεχομένου που θα εμφανιζόταν μέσα σε ένα συγκεκριμένο στοιχείο - Θεωρήστε το
EofTokenως το οριστικό σήμα λήξης αντί να εξαντλείτε τον επαναλήπτη μέσω εξαίρεσης - Για τα εργαλεία καθαρισμού, ελέγξτε τα χαρακτηριστικά
StartTagTokenσε επίπεδο διακριτικού πριν δημιουργηθεί οποιοδήποτε δέντρο
Κοινά Προβλήματα
| Πρόβλημα | Αιτία | Διόρθωση |
|---|---|---|
| Το περιεχόμενο script/style αναλύεται ως σήμανση | Λάθος αρχική κατάσταση για το πλαίσιο | Ορίστε το κατάλληλο TokenizerState μέσω set_state() |
| Οι οντότητες εμφανίζονται ανεπίλυτες | Κατανάλωση ακατέργαστου κειμένου χωρίς επίλυση αναφορών | Χρησιμοποιήστε τις συναρτήσεις επίλυσης αναφοράς χαρακτήρων |
| Η έξοδος του τμήματος διαφέρει από την πλήρη ανάλυση | Οι κανόνες του τμήματος διαφέρουν σκόπιμα | Χρησιμοποιήστε tokenize() για πλήρη έγγραφα |
FAQ
Μπορώ να χρησιμοποιήσω τον tokenizer χωρίς να δημιουργήσω δέντρο;
Ναι — η ροή διακριτικών είναι μια δημόσια, αυτόνομη έξοδος.
Είναι οι καταστάσεις του tokenizer οι τυπικές;
TokenizerState αντικατοπτρίζει τη μηχανή καταστάσεων της προδιαγραφής και είναι ρυθμιζόμενο μέσω του set_state().
Πώς αντιμετωπίζονται οι ονομαστικές αναφορές χαρακτήρων;
Μέσω του resolve_named_char_ref() και του find_named_char_ref_match() ενάντια στον πλήρη πίνακα ονομαστικών αναφορών.
API Reference Σύνοψη
| Κλάση/Μέθοδος | Περιγραφή |
|---|---|
Tokenizer.tokenize | Διαχωρισμός πλήρους εισόδου |
Tokenizer.tokenize_fragment | Διαχωρισμός με κανόνες θραυσμάτων |
Tokenizer.set_state | Ορίστε την αρχική κατάσταση του tokenizer |
StartTagToken | Token ετικέτας έναρξης με χαρακτηριστικά |
TokenizerState | Καταστάσεις μηχανής καταστάσεων προτύπων |
resolve_named_char_ref | Επίλυση ονομασμένης αναφοράς χαρακτήρα |