pub struct XmlWriter<W: Write> { /* private fields */ }
Expand description
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(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 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());
Implementations§
Trait Implementations§
Auto Trait Implementations§
impl<W> Freeze for XmlWriter<W>where
W: Freeze,
impl<W> RefUnwindSafe for XmlWriter<W>where
W: RefUnwindSafe,
impl<W> Send for XmlWriter<W>where
W: Send,
impl<W> Sync for XmlWriter<W>where
W: Sync,
impl<W> Unpin for XmlWriter<W>where
W: Unpin,
impl<W> UnwindSafe for XmlWriter<W>where
W: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)