Merge branch 'tafia/minidom-rs-quick_xml_optim'

This commit is contained in:
lumi 2017-11-08 18:19:05 +01:00
commit f4debf1bbf
2 changed files with 7 additions and 7 deletions

View file

@ -4,7 +4,7 @@ minidom-rs
What's this? What's this?
------------ ------------
A minimal DOM library on top of xml-rs. A minimal DOM library on top of quick-xml.
What license is it under? What license is it under?
------------------------- -------------------------

View file

@ -290,12 +290,12 @@ impl Element {
let e = reader.read_event(&mut buf)?; let e = reader.read_event(&mut buf)?;
match e { match e {
Event::Empty(ref e) | Event::Start(ref e) => { Event::Empty(ref e) | Event::Start(ref e) => {
break build_element(e)?; break build_element(&reader, e)?;
}, },
Event::Eof => { Event::Eof => {
bail!(ErrorKind::EndOfDocument); bail!(ErrorKind::EndOfDocument);
}, },
_ => () // TODO: may need more errors _ => (), // TODO: may need more errors
} }
}; };
@ -304,12 +304,12 @@ impl Element {
loop { loop {
match reader.read_event(&mut buf)? { match reader.read_event(&mut buf)? {
Event::Empty(ref e) => { Event::Empty(ref e) => {
let elem = build_element(e)?; let elem = build_element(&reader, e)?;
// Since there is no Event::End after, directly append it to the current node // Since there is no Event::End after, directly append it to the current node
stack.last_mut().unwrap().append_child(elem); stack.last_mut().unwrap().append_child(elem);
}, },
Event::Start(ref e) => { Event::Start(ref e) => {
let elem = build_element(e)?; let elem = build_element(&reader, e)?;
stack.push(elem); stack.push(elem);
}, },
Event::End(ref e) => { Event::End(ref e) => {
@ -629,13 +629,13 @@ fn split_element_name<S: AsRef<str>>(s: S) -> Result<(Option<String>, String)> {
} }
} }
fn build_element(event: &BytesStart) -> Result<Element> { fn build_element<R: BufRead>(reader: &EventReader<R>, event: &BytesStart) -> Result<Element> {
let mut namespaces = BTreeMap::new(); let mut namespaces = BTreeMap::new();
let attributes = event.attributes() let attributes = event.attributes()
.map(|o| { .map(|o| {
let o = o?; let o = o?;
let key = str::from_utf8(o.key)?.to_owned(); let key = str::from_utf8(o.key)?.to_owned();
let value = str::from_utf8(o.value)?.to_owned(); let value = o.unescape_and_decode_value(reader)?;
Ok((key, value)) Ok((key, value))
}) })
.filter(|o| { .filter(|o| {