#html #parser #tokenizer #html-parsing

no-std htmlparser

基于拉取的、零分配的HTML解析器

2个版本

0.1.1 2023年6月27日
0.1.0 2023年6月27日

#2322解析器实现

Download history 62/week @ 2024-03-11 123/week @ 2024-03-18 10/week @ 2024-03-25 85/week @ 2024-04-01 39/week @ 2024-04-08 61/week @ 2024-04-15 13/week @ 2024-04-22 24/week @ 2024-04-29 38/week @ 2024-05-06 28/week @ 2024-05-13 40/week @ 2024-05-20 54/week @ 2024-05-27 38/week @ 2024-06-03 84/week @ 2024-06-10 54/week @ 2024-06-17 98/week @ 2024-06-24

276 每月下载量
3 个crate中使用 (2个直接使用)

MIT/Apache

72KB
1.5K SLoC

htmlparser

Build Status Crates.io Documentation Rust 1.31+

htmlparser 是一个低级、基于拉取的、零分配的HTML解析器。

示例

for token in htmlparser::Tokenizer::from("<tagname name='value'/>") {
    println!("{:?}", token);
}

为什么需要一个新库?

此库是 xmlparser 的副本,并对解析HTML进行了调整。

优点

  • 所有标记都包含 StrSpan 结构体,该结构体表示子字符串在原始文档中的位置。
  • 良好的错误处理。所有错误类型都包含发生错误的位置(行:列)。
  • 没有堆分配。
  • 没有依赖项。
  • 体积小。根据 cargo-bloat,发布构建中的LOC约为1400行,大小约为30KiB。
  • 支持 no_std 构建。要使用而不使用标准库,请禁用默认功能。

局限性

  • 目前,仅从DOCTYPE中解析ENTITY对象。其他所有对象都被忽略。
  • 没有树结构验证。因此,像XML这样的 <root><child></root></child> 或没有根元素的字符串将被解析而不会出现错误。您应该手动检查此内容。另一方面,<a/><a/> 将导致错误。
  • 重复属性不是错误。因此,像XML这样的 <item a="v1" a="v2"/> 将被解析而不会出现错误。您应该手动检查此内容。
  • 仅支持UTF-8。

安全性

  • 库不得崩溃。任何崩溃都视为严重错误,应予以报告。
  • 库禁止不安全代码。

许可

根据以下之一许可

由您选择。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献,应按上述方式双重许可,不附加任何额外条款或条件。

无运行时依赖

特性