30 个版本 (17 个破坏性版本)
0.19.0 | 2024 年 8 月 8 日 |
---|---|
0.18.1 | 2024 年 6 月 5 日 |
0.18.0 | 2024 年 3 月 22 日 |
0.17.0 | 2022 年 3 月 27 日 |
0.1.0 |
|
#486 in 解析器实现
121,923 每月下载量
在 262 个 crate(5 个直接) 中使用
230KB
5.5K SLoC
xml5ever
警告:此库为 alpha 质量,因此不提供任何保证。
此 crate 提供了一个基于推送的 XML 解析器库,它以错误恢复为代价换取良好的格式。
xml5ever 主要基于 html5ever 解析器,因此如果您熟悉 html5ever,您将熟悉 xml5ever。
该库采用 MIT 和 Apache 许可证双许可。
为什么你应该使用 xml5ever
此库的主要用途是当 XML 格式不良时,通常来自不良的 XML 模板。XML5 尝试以类似于 HTML5 的方式处理大多数常见错误。
何时使用它?
- 你对格式良好的文档不感兴趣。
- 即使数据有错误,你也需要从数据中获取一些信息(尽管不是处理所有可能的错误)。
- 你需要字符引用或 XML 命名空间等特性。
何时不应使用它
- 你需要验证你的文档。
- 你需要 DTD 支持。
- 你需要一个易于使用的解析器,具有许多扩展(例如 XPath,XQuery)。
- 你需要一个经过战斗检验、业界认可的解决方案。
安装
将 xml5ever 添加到项目清单中的依赖项
[dependencies]
xml5ever = "0.18"
入门
这是一个非常简单的 RcDom 支持的解析器
let input = "<xml></xml>".to_tendril();
// To parse XML into a tree form, we need a TreeSink
// luckily xml5ever comes with a static RC backed tree represetation.
let dom: RcDom = parse(std::iter::once(input), Default::default());
// Do something with dom
实际进行解析的是 parse
函数。它期望一个可以被转换成 StrTendril
的迭代器,因此你可以使用 std::iter::once(input)
或 Some(input).into_iter()
(其中 input
是类似于 StrTendril
的结构)。
在 xml5ever 上进行工作
要构建示例和测试,你需要做类似以下的事情
git submodule update --init # to fetch xml5lib-tests
cargo build
cargo test
这将从外部仓库检索测试,并调用 cargo 构建和测试包。如果你需要文档,请查看 API 文档 或运行 cargo docs
生成文档。
依赖项
~0.8–5.5MB
~21K SLoC