Arbeit mit XML in Rust: Bibliotheken roxmltree, quick-xml und serde-xml-rs

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeit mit XML in Rust: Überblick über Bibliotheken und praktische Beispiele



Rust ist eine moderne systemnahe Programmiersprache, die zunehmend für die Entwicklung hochlastiger Webdienste, Kommandozeilenwerkzeuge und eingebetteter Systeme eingesetzt wird. Bei der Arbeit mit Daten besteht häufig die Notwendigkeit, XML-Dokumente zu verarbeiten. Im Gegensatz zu Python, wo die Standardbibliothek xml.etree.ElementTree die meisten Aufgaben abdeckt, bietet das Rust-Ökosystem mehrere spezialisierte Crates mit unterschiedlichen Ansätzen. In diesem Artikel betrachten wir drei der beliebtesten Werkzeuge für die Arbeit mit XML in Rust: roxmltree, quick-xml und serde-xml-rs.



1. roxmltree – schneller und sicherer Nur-Lese-Parser



roxmltree ist ein Crate, das ausschließlich zum Lesen von XML entwickelt wurde. Es unterstützt keine Mutation oder Erstellung von Dokumenten, bietet dafür aber einen sehr schnellen und zuverlässigen Parser mit vollständiger Unterstützung für Namespaces. Der Hauptvorteil ist die Arbeit mit geliehenen Daten (Zero-Copy), was die Speicherzuweisung minimiert.



// cargo add roxmltreeuse roxmltree::Document;

fn main() -> Result<(), roxmltree::Error> { let xml = r#" <root> <item id="1">Erstes Element</item> <item id="2">Zweites Element</item> </root>"#;

let doc = Document::parse(xml)?;

// Wurzelelement abrufen let root = doc.root_element(); println!("Wurzelelement: {}", root.tag_name().name());

// Alle Kindelemente <item> durchsuchen for item in root.children().filter(|n| n.has_tag_name("item")) { let id = item.attribute("id").unwrap_or("unknown"); let text = item.text().unwrap_or(""); println!("ID: {}, Text: {}", id, text); }

Ok(())}


Wann verwenden: wenn Sie nur XML-Dateien lesen müssen (Konfigurationen, API-Antworten, RSS-Feeds) und maximale Leistung wichtig ist. roxmltree ist ideal für einmaliges Parsen.



2. quick-xml – universeller Parser mit Lese- und Schreibunterstützung



quick-xml ist das beliebteste Crate für die Arbeit mit XML in Rust. Es unterstützt sowohl Parsing (ereignisbasiert und DOM-ähnlich) als auch Serialisierung (Schreiben) von XML. Es arbeitet sowohl mit Streams (Reader) als auch mit ganzen Zeichenketten. Es unterstützt Attribute, CDATA, Kommentare und Escape-Sequenzen.



// cargo add quick-xmluse quick_xml::Reader;use quick_xml::events::Event;

fn main() -> Result<(), quick_xml::Error> { let xml = r#"<library> <book genre="rust">Programmieren in Rust</book> <book genre="python">Python für Anfänger</book></library>"#;

let mut reader = Reader::from_str(xml); reader.trim_text(true); let mut txt = String::new(); let mut current_genre = String::new();

loop { match reader.read_event_into(&mut txt) { Ok(Event::Start(ref e)) => { if e.name().as_ref() == b"book" { // Attribut genre abrufen if let Some(attr) = e.attributes().flatten().find(|a| a.key.as_ref() == b"genre") { current_genre = String::from_utf8_lossy(&attr.value).to_string(); } } } Ok(Event::Text(ref e)) => { let text = e.unescape()?; println!("Genre: {}, Titel: {}", current_genre, text); } Ok(Event::Eof) => break, Err(e) => panic!("Fehler: {:?}", e), _ => {} } txt.clear(); } Ok(())}


Wann verwenden: wenn Flexibilität benötigt wird – große Dateien streamen, neue XML-Dokumente erstellen oder

Empfehlungen