Crate quick_xml [−] [src]
Quick XmlReader reader which performs very well.
Example
use quick_xml::{XmlReader, Event}; let xml = r#"<tag1 att1 = "test"> <tag2><!--Test comment-->Test</tag2> <tag2> Test 2 </tag2> </tag1>"#; let reader = XmlReader::from_str(xml).trim_text(true); 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).collect::<Vec<_>>()), b"tag2" => count += 1, _ => (), } }, Ok(Event::Text(e)) => txt.push(e.into_string()), Err((e, pos)) => panic!("{:?} at buffer position {}", e, pos), _ => (), } }
Example of transforming XML
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());
Modules
attributes |
Xml Attributes module |
error |
Error management module |
Structs
Element |
Wrapper around Vec |
XmlDecl |
Wrapper around Element to parse XmlDecl |
XmlReader |
Xml reader |
XmlWriter |
Xml writer |
Enums
Event |
Event to interprete node as they are parsed |
Traits
AsStr |
A trait to support on-demand conversion from UTF-8 |