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.

If you want to use xml_sax interface to implement another parser we can discuss to improve the interface. Currently it is integrated to this crate.

To Do

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::{sax::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::from_reader(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);

}

```