#html-parser #html #parser

toks

针对 html5ever::rcdom::RcDom Handle 解析的高效令牌,旨在实现O(1)的HTML DOM遍历与效率

14个版本 (4个稳定版)

1.3.0 2024年8月2日
1.2.0 2023年7月21日
1.1.0 2022年8月21日
1.0.0 2020年4月11日
0.4.0 2017年11月7日

#1842 in Web编程

Download history 110/week @ 2024-06-30 205/week @ 2024-07-28

每月308次下载

MIT/Apache

12KB
71

toks

针对 rcdom::RcDom Handle 解析的高效令牌,旨在实现O(1)的HTML DOM遍历。

Rust Crates.io

文档

使用方法

通过查看示例开始使用。

许可

MIT/Apache-2.0


lib.rs:

针对 rcdom::RcDom Handle 解析的高效令牌,旨在实现O(1)的HTML DOM遍历。

该库旨在提供方便且高效的HTML DOM元素处理。

示例

 extern crate toks;
 #[macro_use]
 extern crate html5ever;

 use toks::prelude::*;
 use std::io::{self, Read};

 pub struct LinkTok {
     total: u32,
 }

 impl Tok for LinkTok {
     fn is_match(&self, qn: &QualName) -> bool {
         qn.local == local_name!("a")
     }

     fn process(&mut self, _: &mut Vec<Attribute>, _: &mut Vec<Handle>) {
         self.total += 1;
     }
 }

 // How to use
 // $ cargo build --example count_links
 // $ cat your.html | ./target/debug/examples/count_links
 // Link <a> count 9
 fn main() {
     let mut chunk = String::new();
     io::stdin().read_to_string(&mut chunk).unwrap();

     let dom = parse_document(RcDom::default(), Default::default()).one(chunk);

     let mut lt = LinkTok { total: 0 };

     // Dropping mut reference
     {
         recursion(&mut vec![&mut lt], dom.document);
     }

     println!("Link <a> count {}", lt.total);
 }

依赖项

~1.3–6MB
~34K SLoC