Rust XML parser implementation that parses any well-formed XML defined in the W3C Spec in a streaming way.
In this example "start element" and "end element" events are counted. Note that you can find more examples under tests
directory.
```rust use std::fs::File; use xml_oxide::{parser::OxideParser, sax::Event};
fn main() { println!("Hello, world!");
let mut counter: usize = 0;
let mut end_counter: usize = 0;
// let char_counter: usize = 0;
use std::time::Instant;
let now = Instant::now();
let f = File::open(
"C:/Users/fatih/Downloads/enwiki-20211120-abstract1.xml/enwiki-20211120-abstract1.xml",
)
.unwrap();
let mut p = OxideParser::start(f);
loop {
let res = p.read_event();
// println!("{:?}", res);
match res {
Ok(event) => match event {
Event::StartDocument => {}
Event::EndDocument => {}
Event::StartElement(el) => {
counter = counter + 1;
// print every 10000th element name
if counter % 10000 == 0 {
println!("%10000 start {}", el.name);
}
}
Event::EndElement(el) => {
end_counter += 1;
if el.name == "feed" {
break;
}
}
Event::Characters(_) => {}
Event::Reference(_) => {}
_ => {}
},
Err(err) => {
println!("{}", err);
break;
}
}
}
println!("START EVENT COUNT:{}", counter);
println!("END EVENT COUNT:{}", end_counter);
let elapsed = now.elapsed();
println!("Elapsed: {:.2?}", elapsed);
}
```