2个版本
使用旧的Rust 2015
0.4.1-tobz1000-1 | 2021年1月24日 |
---|
#1913 in 编码
在 3 个crate中使用 (via odata_client_codegen)
50KB
1K SLoC
serde-xml-rs
基于xml-rs的Serde反序列化器(兼容0.9+)
用法
对于实现了 std::io::Read
的任何类型,使用 serde_xml_rs::from_reader(...)
如下所示
#[macro_use]
extern crate serde_derive;
extern crate serde;
extern crate serde_xml_rs;
use serde_xml_rs::from_reader;
#[derive(Debug, Deserialize)]
struct Item {
pub name: String,
pub source: String
}
#[derive(Debug, Deserialize)]
struct Project {
pub name: String,
#[serde(rename = "Item", default)]
pub items: Vec<Item>
}
fn main() {
let s = r##"
<Project name="my_project">
<Item name="hello" source="world.rs" />
</Project>
"##;
let project: Project = from_reader(s.as_bytes()).unwrap();
println!("{:#?}", project);
}
或者,您可以使用 serde_xml_rs::Deserializer
从预先配置的 xml_rs::EventReader
创建反序列化器。
解析标签的“值”
如果您有一个如下形式的输入 <foo abc="xyz">bar</foo>
,并且您想访问 bar
,您可以使用特殊名称 $value
struct Foo {
pub abc: String,
#[serde(rename = "$value")]
pub body: String,
}
解析表示
反序列化器试图尽可能直观。
然而,在某些边缘情况下,您可能会收到意外的错误,因此最好查看 tests
以满足预期。
依赖关系
~0.7–1.4MB
~30K SLoC