High performance xml pull reader/writer.
Documentation Syntax is inspired by xml-rs.
Carto.toml
toml
[dependencies]
quick-xml = "0.1"
rust
extern crate quick_xml;
```rust use quick_xml::{XmlReader, Event};
let xml = r#"XmlReader
// to an XmlnsReader
:
// let readerns = reader.namespaced();
let mut count = 0;
let mut txt = Vec::new();
for r in reader {
match r {
Ok(Event::Start(ref e)) => {
match e.name() {
b"tag1" => println!("attributes values: {:?}",
e.attributes().map(|a| a.unwrap().1)
// if you want to resolve attribute namespaces you need to use
// the resolve
method of XmlnsReader
//
// e.attributes().map(|a| a.map(|(k, _)| readerns.resolve(k))) ...
//
// note: as the for
loop moves the reader, you may need to use a
// while let Some(r) = reader.next()
instead
.collect::
```rust use quickxml::{AsStr, Element, Event, XmlReader, XmlWriter}; use quickxml::Event::*; use std::io::Cursor; use std::iter;
let xml = r#"
// 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.intoinner().intoinner();
let expected = r#"
Here is a simple comparison with xml-rs for very basic operations.
test bench_quick_xml ... bench: 692,552 ns/iter (+/- 8,580)
test bench_quick_xml_namespaced ... bench: 975,165 ns/iter (+/- 8,571)
test bench_xml_rs ... bench: 14,032,716 ns/iter (+/- 830,202
&u[u8]
=> probably not too relevant for the momentAny PR is welcomed!
MIT