Struct quick_xml::Writer

source ·
pub struct Writer<W: Write> { /* private fields */ }
Expand description

XML writer.

Writes XML Events to a Write implementor.

Examples

use quick_xml::{Reader, Writer};
use quick_xml::events::{Event, BytesEnd, BytesStart};
use std::io::Cursor;

let xml = r#"<this_tag k1="v1" k2="v2"><child>text</child></this_tag>"#;
let mut reader = Reader::from_str(xml);
reader.trim_text(true);
let mut writer = Writer::new(Cursor::new(Vec::new()));
let mut buf = Vec::new();
loop {
    match reader.read_event(&mut buf) {
        Ok(Event::Start(ref e)) if e.name() == b"this_tag" => {

            // crates a new element ... alternatively we could reuse `e` by calling
            // `e.into_owned()`
            let mut elem = BytesStart::owned(b"my_elem".to_vec(), "my_elem".len());

            // collect existing attributes
            elem.extend_attributes(e.attributes().map(|attr| attr.unwrap()));

            // copy existing attributes, adds a new my-key="some value" attribute
            elem.push_attribute(("my-key", "some value"));

            // writes the event to the writer
            assert!(writer.write_event(Event::Start(elem)).is_ok());
        },
        Ok(Event::End(ref e)) if e.name() == b"this_tag" => {
            assert!(writer.write_event(Event::End(BytesEnd::borrowed(b"my_elem"))).is_ok());
        },
        Ok(Event::Eof) => break,
        // we can either move or borrow the event to write, depending on your use-case
        Ok(e) => assert!(writer.write_event(&e).is_ok()),
        Err(e) => panic!("{}", e),
    }
    buf.clear();
}

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§

source§

impl<W: Write> Writer<W>

source

pub fn new(inner: W) -> Writer<W>

Creates a Writer from a generic Write

source

pub fn new_with_indent( inner: W, indent_char: u8, indent_size: usize ) -> Writer<W>

Creates a Writer with configured whitespace indents from a generic Write

source

pub fn into_inner(self) -> W

Consumes this Writer, returning the underlying writer.

source

pub fn inner(&mut self) -> &mut W

Get inner writer, keeping ownership

source

pub fn write_event<'a, E: AsRef<Event<'a>>>(&mut self, event: E) -> Result<()>

Writes the given event to the underlying writer.

source

pub fn write(&mut self, value: &[u8]) -> Result<()>

Writes bytes

source

pub fn write_indent(&mut self) -> Result<()>

Manually write a newline and indentation at the proper level.

This can be used when the heuristic to line break and indent after any Event apart from Text fails such as when a Start occurs directly after Text. This method will do nothing if Writer was not constructed with new_with_indent.

Trait Implementations§

source§

impl<W: Clone + Write> Clone for Writer<W>

source§

fn clone(&self) -> Writer<W>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<W> RefUnwindSafe for Writer<W>where W: RefUnwindSafe,

§

impl<W> Send for Writer<W>where W: Send,

§

impl<W> Sync for Writer<W>where W: Sync,

§

impl<W> Unpin for Writer<W>where W: Unpin,

§

impl<W> UnwindSafe for Writer<W>where W: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.