如何使用 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));
我有一个很大的 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));