Add an Attribute to an XML Element in Rust
October 2025
This is how I'm adding attributes to XML elements in Rust:
---
[dependencies]
anyhow = "1.0.100"
quick-xml = "0.38.3"
---
#![allow(unused)]
use anyhow::Result;
use quick_xml::events::attributes::Attribute;
use quick_xml::events::{BytesEnd, BytesStart, Event};
use quick_xml::reader::Reader;
use quick_xml::writer::Writer;
use std::io::Cursor;
fn main() -> Result<()> {
let element = "el";
let key = "alfa";
let value = "bravo";
let content = "<el></el>";
let result = add_attr(element, key, value, content);
println!("{}", result.unwrap());
Ok(())
}
pub fn add_attr(element: &str, key: &str, value: &str, content: &str) -> Result<String> {
let mut reader = Reader::from_str(&content);
reader.config_mut().trim_text(true);
let mut writer = Writer::new(Cursor::new(Vec::new()));
loop {
match reader.read_event() {
Ok(Event::Eof) => break,
Ok(Event::Start(mut e)) if e.name().as_ref() == element.as_bytes() => {
let new_attr = Attribute::from((key, value));
e.push_attribute(new_attr);
assert!(writer.write_event(Event::Start(e)).is_ok());
}
Ok(e) => assert!(writer.write_event(e).is_ok()),
Err(e) => panic!(
"Error at position {}: {:?}",
reader.error_position(),
e
),
}
}
let result = writer.into_inner().into_inner();
let output = String::from_utf8_lossy(&result).to_string();
Ok(output)
}