【发布时间】:2021-10-04 11:55:51
【问题描述】:
我想解析一个可能包含不同数据类型的 XML 元素。
以下是我能想到的最简单的情况:
use serde_derive::{Deserialize, Serialize};
use serde_xml_rs::{from_str};
const XML: &str = r#"
<element>
foo
</element>
"#;
const XML2: &str = r#"
<element>
123
</element>
"#;
#[derive(Serialize, Deserialize, Debug, PartialEq)]
enum Element {
#[serde(rename="element")]
Text(String),
#[serde(rename="element")]
Number(i32),
}
fn main() {
let el: Element = from_str(&XML).unwrap();
println!("{:?}", &el);
println!("\n\n\n\n");
let el2: Element = from_str(&XML2).unwrap();
println!("{:?}", &el2);
}
当前代码将这两个元素分别解析为 Text(String),而不是 Text(String)、Number(i32)。
如果我颠倒顺序,程序就会崩溃,因为“foo”不能被解析为整数。
#[derive(Serialize, Deserialize, Debug, PartialEq)]
enum Element {
#[serde(rename="element")]
Number(i32),
#[serde(rename="element")]
Text(String),
}
如何正确实施我的程序?
【问题讨论】: