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
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