10 个不稳定版本 (3 个破坏性更新)

0.4.4 2023年10月7日
0.4.3 2023年9月23日
0.3.0 2023年9月7日
0.2.2 2023年9月3日
0.1.0 2023年7月2日

#2220解析器实现

每月21次下载
用于 2 crates

MIT 许可证

425KB
3K SLoC

FB2 for Rust

该库是一组模型,它使 quick-xml 能够以结构化方式反序列化 FB2 文件。该库尝试解析一个无效的 FB2 文件,修复它,并输出一个有效的文件。这是因为许多真实的 FB2 书籍并不遵循标准... 我们可以选择忽略无效元素,失败反序列化,或者接受它们并尝试将它们映射到标准模式。该模型试图遵循第三种方法,这在有意义的场合。该库模型几乎符合 标准 XSD 模式,但有少数例外

  • 第一个部分的内容元素可以是一个图像
  • 部分可以同时有内容和嵌套部分
  • 大多数字段是可选的,与 XSD 模式相反
  • 除了结构化日期、版本、序列号和语言标签外,不执行字符串验证
  • 二进制数据与图像引用不关联,例如 Rc<Binary>
  • xs:ID 的唯一性未验证
  • minOccurs/maxOccurs 未验证,即解析器不验证是否存在最多 2 个 "output" 元素
  • 带有时区的 xs:gYear 解析失败
  • 带有时区的 xs:date 解析失败
  • XML 序列不是始终强制执行

当前版本的模型使 quick-xml 能够反序列化 95% 以上的 FB2 文件。

示例

use fb2::FictionBook;
use std::fs::File;
use std::io::BufReader;

fn main() {
    let file = File::open("examples/books/churchill_trial.fb2").unwrap();
    let reader = BufReader::new(file);
    let book: FictionBook = quick_xml::de::from_reader(reader).unwrap();
    println!("{:#?}", book);
}

尝试使用

cargo run --example parse_sample

如何反序列化 windows-1251(或其它编码)

启用 quick-xml 的 encoding 功能

quick-xml = { version = "<version>", features = ["encoding", "serialize"] }

然后,像往常一样进行反序列化。

依赖项

~4MB
~74K SLoC