Parse XML with mix of element and untagged text

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.

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.