#xml #parser #tokenizer

no-std xmlparser

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

23 个版本 (12 个破坏性更新)

0.13.6 2023 年 9 月 30 日
0.13.5 2022 年 10 月 18 日
0.13.4 2021 年 6 月 24 日
0.13.3 2020 年 9 月 2 日
0.1.0 2017 年 12 月 15 日

#45 in 解析器实现

Download history 313096/week @ 2024-04-20 313747/week @ 2024-04-27 313672/week @ 2024-05-04 343584/week @ 2024-05-11 352337/week @ 2024-05-18 326442/week @ 2024-05-25 385886/week @ 2024-06-01 384371/week @ 2024-06-08 366297/week @ 2024-06-15 358986/week @ 2024-06-22 408598/week @ 2024-06-29 444232/week @ 2024-07-06 416479/week @ 2024-07-13 431551/week @ 2024-07-20 428854/week @ 2024-07-27 424171/week @ 2024-08-03

1,779,881 每月下载量
用于 1,319 个crate (直接使用 31 个)

MIT/Apache

69KB
1.5K SLoC

xmlparser

Build Status Crates.io Documentation Rust 1.31+

xmlparser 是一个底层、基于拉取的、零分配的 XML 1.0 解析器。

示例

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

为什么需要新的库?

这个库基本上是一个底层 XML 分词器,它保留了标记的位置,并不打算直接使用。如果您正在寻找高级解决方案,请查看 roxmltree.

优点

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

限制

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

安全性

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

许可证

以下任一许可证下授权:

任选其一。

贡献

除非您明确说明,否则任何有意提交并由您包含在作品中的贡献,如Apache-2.0许可证中定义的,应如上双许可,不附加任何额外条款或条件。

无运行时依赖

特性