Expand description
面向正文提取的 HTML 解析器。
- 零拷贝:文本和属性值直接引用源字符串,只有含字符引用的部分才解码到一块共享缓冲区;
- 紧凑的树:节点放在一个
Vec里,用 u32 下标互相引用,标签是枚举; - HTML5 树构建规则里影响文本结构的部分都实现了(隐式标签、自动闭合、作用域、表格、
外部内容、raw text),见
builder模块的说明; - CSS 选择器(
Selector)和 HTML 序列化(NodeRef::html)。
let doc = pagesift_html::Html::parse("<p>Fish & chips<p>Peas");
let paragraphs: Vec<String> = doc
.root()
.descendants()
.filter(|n| n.tag() == Some(pagesift_html::Tag::P))
.map(|n| n.text())
.collect();
assert_eq!(paragraphs, ["Fish & chips", "Peas"]);Structs§
- Ancestors
- Children
- Descendants
- Element
- 元素:标签、名字和属性。
- Html
- 解析好的文档。借用源字符串(输入含
\r或 NUL 时持有规范化后的副本)。 - NodeId
- 节点 id,在同一个文档里唯一,取值
0..Html::len()。 - NodeRef
- 节点的引用。可以复制,比较时比的是节点身份。
- Select
Html::select和NodeRef::select返回的迭代器。- Selector
- 解析好的选择器列表(逗号分隔)。解析一次,可以在多个文档、多个线程上复用。
- Selector
Error - 选择器语法错误:出错位置(字节偏移)和原因。
Enums§
- Tag
- HTML 标签。不认识的标签是
Tag::Other,名字从crate::Element::name取。