Leggere file XML in Rust e xml-rs

Mattepuffo's logo
Leggere file XML in Rust e xml-rs

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!


Condividi

Commentami!