As with a standard file, we first have to open the file and create a reader:
let file = File::open("my_xmlfile.xml").unwrap();
let reader =BufferedReader::new(file);
Next, we start the reading. Unlike a normal reader, we use EventReader. This provides a number of events (such as StartElement, EndElement, and Error), which are required for reading in from the differing nodes:
let mut xml_parser = EventReader::new(reader);
Next, we iterate through the file, as follows:
for e in xml_parser.events() { match e { StartElement { name, .. } => { println!("{}", name); } EndElement {name} => { println!("{}", name); } Error(e) => { println!("Error in file: {}", e); } _ => {} } }
In the preceding snippet, _ => {} essentially means that you don't care what is left, do something with it (in this case, the something is nothing). You will see the symbol _ quite a bit in Rust. Commonly, it is used in loops where the variable being acted on is never used, for example:
for _ in something() {...}
We aren't going to use the iterator; we just need something to enable the iteration to go to the next value.