Как я могу анализировать XML со смесью элементов и текста без тегов с помощью serde-xml-rs?

#xml #rust #serde

Вопрос:

У меня есть XML, который в некоторых частях смешивает XML-элементы с текстом без тегов.

 <element>
    <subelement id="123"></subelement>
    arbitrary text
</element>
 

Как я могу разобрать это в структуру в Rust?

Моя попытка реализации:

 use serde_derive::{Deserialize, Serialize};
use serde_xml_rs::{from_str};

#[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() {
    const XML: amp;str = r#"
    <element>
        <subelement id="123"></subelement>
        arbitrary text
    </element>
    "#;
    let expected = Element {
        subelement: Some(SubElement { id: 123 }),
        text: String::from("arbitrary text"),
    };
    let actual: Element = from_str(amp;XML).unwrap();
    assert_eq!(amp;expected, amp;actual);
    println!("{:?}", amp;actual);
}
 

Сообщение об ошибке:

 thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Custom { field: "duplicate field `$value`" }'
 

Я также задавал этот вопрос здесь день назад.

Комментарии:

1. Что касается предупреждения, данного при написании вопроса: это помогло бы лучше прояснить, что не работает. В идеале покажите, что программа печатает для этих образцов, и укажите ожидаемые результаты.