Leggere file XML in Rust e xml-rs
La libreria xml-rs è una delle più usate per la lettura / creazione di file XML in Rust.
Per usarla aggiungete questa dipendenza a Cargo.toml:
[dependencies]
xml-rs = "0.8"
Bene, qui sotto un esempio di lettura del file XML:
extern crate xml;
use std::fs::File;
use std::io::BufReader;
use xml::reader::{EventReader, XmlEvent};
fn indent(size: usize) -> String {
const INDENT: &'static str = " ";
(0..size).map(|_| INDENT)
.fold(String::with_capacity(size * INDENT.len()), |r, s| r + s)
}
fn main() {
let file = File::open("/home/server/file.xml").unwrap();
let file = BufReader::new(file);
let parser = EventReader::new(file);
let mut depth = 0;
for e in parser {
match e {
Ok(XmlEvent::StartElement { name, .. }) => {
println!("{}+{}", indent(depth), name);
depth += 1;
}
Ok(XmlEvent::Characters(value)) => {
println!("{}{}", indent(depth), value);
}
Ok(XmlEvent::EndElement { name }) => {
depth -= 1;
println!("{}-{}", indent(depth), name);
}
Err(e) => {
println!("Error: {}", e);
break;
}
_ => {}
}
}
}
La funzione indent, che si trova nell'esempio sulla documentazione, non fa altro che indentare l'output in console.
Ovviamente potrebbe non esservi utile, in quanto dipende da cose dovete fare con l'XML.
Comunque l'output sarà una cosa del genere:
+libri
+libro
+autore
King
-autore
+titolo
Le notti di Salem
-titolo
-libro
+libro
+autore
Cussler
-autore
+titolo
Sahara
-titolo
-libro
-libri
Enjoy!
rust xml-rs xml
Commentami!