You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.1 KiB
37 lines
1.1 KiB
5 years ago
|
use std::env;
|
||
|
use xml::{Event, Parser};
|
||
|
use std::fs::File;
|
||
|
use std::io::prelude::*;
|
||
|
|
||
|
fn main() {
|
||
|
let args:Vec<_> = env::args().collect();
|
||
|
if args.len() != 2 {
|
||
|
println!("Required: filename.");
|
||
|
std::process::exit(2);
|
||
|
}
|
||
|
|
||
|
let filename = &args[1];
|
||
|
|
||
|
println!("Will process {}", filename);
|
||
|
|
||
|
// Need to find a way to load small chunks and feed it to the parser while parsing.
|
||
|
// (E.g., load 1024 bytes, feed it to the parser and, if the parser can't continue,
|
||
|
// feed more data, till the end of file).
|
||
|
let mut file = File::open(filename).unwrap();
|
||
|
let mut contents = String::new();
|
||
|
file.read_to_string(&mut contents).unwrap();
|
||
|
|
||
|
let mut parser = Parser::new();
|
||
|
parser.feed_str(&contents);
|
||
|
|
||
|
for event in parser {
|
||
|
match event.unwrap() {
|
||
|
Event::ElementStart(tag) => println!("Start: {}", tag.name),
|
||
|
Event::ElementEnd(tag) => println!("End: {}", tag.name),
|
||
|
Event::Characters(data) => println!("Data: {}", data),
|
||
|
Event::CDATA(data) => println!("CDATA: {}", data),
|
||
|
_ => ()
|
||
|
}
|
||
|
}
|
||
|
}
|