解析文件 returns 错误 "thread 'main' panicked"

Parsing file returns error "thread 'main' panicked"

我正在为 serde-xml-rs 苦苦挣扎,希望有人能帮助我。我已经能够从下面的示例 XML 中解析出单个 "pet"。但是,当我尝试解析 "pets" 下有两个 "pet" 条目的文件时,如下图所示,我收到错误 "thread 'main' panicked at 'called Result::unwrap() on an Err value: Error(Custom(" 缺少字段 species"), State { next_error:None,回溯:一些(堆栈回溯:...“

对 Rust 和与 XML 的较量都相当陌生,所以我希望这是一个简单的错误或某处的误解。不胜感激。

extern crate serde;
extern crate serde_xml_rs;
#[macro_use]
extern crate serde_derive;

use serde_xml_rs::{from_str, to_string};

#[derive(Debug, Serialize, Deserialize, PartialEq)]
struct Pets {
    #[serde(rename = "pet")]
    pets: Vec<Pet>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq)]
struct Pet {
    species: String,
    name: String,
}

fn main() {
    let src = r##"<?xml version="1.0"?>
        <pets>
        <pet>
        <species>cat</species>
        <name>Leroy</name>
        </pet>
        <pet>
        <species>dog</species>
        <name>Rowdy</name>
        </pet>
        </pets>
        "##;

    let pet: Pet = from_str(&src).unwrap();
    //println!("{:#?}",pet);
}

确实是一个非常简单的错误。您只需要使用 Pets 类型而不是 Pet:

fn main() {
    ...

    let pets: Pets = from_str(&src).unwrap();
    println!("{:#?}", pets);
}