47个版本 (22个破坏性更新)

0.24.0 2024年4月19日
0.23.0 2024年3月22日
0.22.0 2024年2月20日
0.17.0 2023年11月13日
0.7.1 2022年12月22日

#230 in 数据结构

每月48次下载
用于 natural-xml-diff

MIT 许可证

390KB
7K SLoC

Xot - XML对象树

Crates.io Documentation

Xot是一个功能齐全的Rust XML树访问和操作库。使用Xot,您可以将XML数据加载到对象树中,然后对其进行操作,并将其序列化回XML。

API文档

功能

  • 广泛的XML树访问和操作API。

  • 您可以访问节点之父节点!许多Rust XML树库不支持此功能:例如 xmltree-rsRustyXMLminidomelementtree 都没有这个功能。 roxmltree 允许访问父节点,但仅限于只读。

  • 轻松地将节点从树中移动到树中,从树中移动到其他树中。

  • 访问整个XML结构,包括注释和处理指令,并支持命名空间和属性节点。

  • 紧凑存储XML数据,具有高效的遍历。

  • 将XML解析成树,并将其序列化回XML。

  • 美化打印。删除非重要空白。

支持

Xot具有全面的XML支持。支持元素和属性的命名空间。您还可以获取注释和处理指令。

Xot公开整个XML结构以供访问和程序化操作。

局限性

以下是一些局限性

  • 不支持DTD。
  • 仅支持XML 1.0。

为什么还需要另一个Rust XML库?

如果需要能够将XML作为树访问,在必要时对其进行修改,并将其再次序列化,请使用Xot。虽然存在各种Rust XML树库,但似乎没有哪个特别关注完整的树操作API,包括父节点访问,因此Xot旨在填补这一空白。

如果需要以树的形式访问XML,性能极高,且根本不需要树操作或序列化,我推荐 roxmltree

对于像Xpath以及树操作等广泛的功能,您可以使用libxml,它是libxml2 C库的封装。遗憾的是,其树访问功能并不完全完整,我在使用时遇到过奇怪的错误甚至崩溃;这也是我创建Xot的部分原因。

如果您需要以高性能处理大量XML数据,可能不想使用树库,而是使用各种XML解析/序列化库之一。

实现说明

Xot底层使用indextree包。Xot完全封装了indextree的功能,但允许的各种操作都是从indextree中取出的。

依赖项

~4–6.5MB
~168K SLoC