Struct quick_xml::XmlWriter
[−]
[src]
pub struct XmlWriter<W: Write> { // some fields omitted }
Xml writer
Consumes a Write
and writes xml Events
use quick_xml::{AsStr, Element, Event, XmlReader, XmlWriter}; use quick_xml::Event::*; use std::io::Cursor; use std::iter; let xml = r#"<this_tag k1="v1" k2="v2"><child>text</child></this_tag>"#; let reader = XmlReader::from_str(xml).trim_text(true); let mut writer = XmlWriter::new(Cursor::new(Vec::new())); for r in reader { match r { Ok(Event::Start(ref e)) if e.name() == b"this_tag" => { // collect existing attributes let mut attrs = e.attributes().map(|attr| attr.unwrap()).collect::<Vec<_>>(); // copy existing attributes, adds a new my-key="some value" attribute let mut elem = Element::new("my_elem").with_attributes(attrs); elem.push_attribute(b"my-key", "some value"); // writes the event to the writer assert!(writer.write(Start(elem)).is_ok()); }, Ok(Event::End(ref e)) if e.name() == b"this_tag" => { assert!(writer.write(End(Element::new("my_elem"))).is_ok()); }, Ok(e) => assert!(writer.write(e).is_ok()), Err((e, pos)) => panic!("{:?} at buffer position {}", e, pos), } } let result = writer.into_inner().into_inner(); let expected = r#"<my_elem k1="v1" k2="v2" my-key="some value"><child>text</child></my_elem>"#; assert_eq!(result, expected.as_bytes());