xml_oxide

crates.io github Released API docs

Rust XML parser implementation that parses any well-formed XML defined in the W3C Spec in a streaming way.

Features

Example Usage

In this example StartElement and EndElement events are counted. Note that you can find more examples under tests directory.

```rust use std::fs::File; use xml_oxide::{parser::Parser, sax::Event};

fn main() { println!("Starting...");

let mut counter: usize = 0;
let mut end_counter: usize = 0;

let now = std::time::Instant::now();

let f = File::open("./tests/xml_files/books.xml").unwrap();

let mut p = Parser::start(f);

loop {
    let res = p.read_event();

    match res {
        Ok(event) => match event {
            Event::StartDocument => {}
            Event::EndDocument => {
                break;
            }
            Event::StartElement(el) => {
                //You can differantiate between Starting Tag and Empty Element Tag
                if !el.is_empty {
                    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!("Time elapsed: {:.2?}", elapsed);

}

```