如何使用 xml-rs 获取 xml 中的属性值?

How can I get an attribute value in xml using xml-rs?

我有一个很大的 xml 文件,我想在 species 标签下打印一个特定的属性值名称 id。我写了这段代码

fn parse_fn(filename: &str) {
    let file = File::open(filename).unwrap();
    let file = BufReader::new(file);
    let parser = EventReader::new(file);
    for e in parser {
        match e {
            Ok(XmlEvent::StartElement { name, .. }) => {
                if name.local_name=="species"{
                    println!("{}",);
                }
            }
            Err(e) => {
                println!("Error: {}", e);
                break;
            }
            _ => {}
        }
    }

我不知道如何在此处获取该特定属性值。

StartElement enum variant has an attributes field which is a Vec<OwnedAttribute>, and OwnedAttribute has a value: String field as well as a name: OwnedName field, and OwnedName 有一个 local_name: String 字段。所以,它可能看起来像这样:

match e {
    Ok(XmlEvent::StartElement { name, attributes, .. }) => {
        if name.local_name == "species" {
            for attr in attributes {
                if attr.name.local_name == "id" {
                    println!("{}", attr.value);
                }
            }
        }
    }
}

或者,使用迭代器可以将循环替换为

attributes
    .iter()
    .filter(|attr| attr.name.local_name == "id")
    .for_each(|attr| println!("{}", attr));