I have XML that in some parts mixes XML elements with untagged text.
How can I parse that in Rust?
Example:
use serde_derive::{Deserialize, Serialize};
use serde_xml_rs::{from_str};
const XML: &str = r#"
<element>
<subelement id="123"></subelement>
arbitrary text
</element>
"#;
const XML2: &str = r#"
<element>
arbitrary text
</element>
"#;
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename="element")]
struct Element {
#[serde(default)]
subelement: Option<SubElement>,
#[serde(rename="$value")]
text: String,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct SubElement {
id: i32,
}
fn main() {
let el: Element = from_str(&XML).unwrap();
println!("{:?}", &el);
println!("\n");
let el2: Element = from_str(&XML2).unwrap();
println!("{:?}", &el2);
}
The example works for XML2
but not for XML
.