Guide de Migration
Migration depuis roxmltree vers oxml
Conservez une sécurité 100% Rust tout en débloquant XPath 1.0, les mutations du DOM, la validation XSD et un écosystème d'outils unifié.
Pourquoi évoluer ?
roxmltree est un analyseur XML en lecture seule très apprécié dans la communauté Rust pour son strict respect de #![forbid(unsafe_code)]. Cependant, de nombreux projets se heurtent à ses limites fonctionnelles :
- La Limite du Lecture-Seule :
roxmltreene permet pas de modifier des nœuds, d'insérer des éléments enfants, de mettre à jour des attributs ou de sérialiser du XML.oxmlpropose un DOM en arène générationnelle entièrement mutable. - Absence de XPath 1.0 :
roxmltreeimpose un parcours d'arbre récursif manuel.oxmlinclut un moteur XPath 1.0 complet avec fonctions standard et raccourci entier $O(1)$. - Zéro Validation de Schéma :
roxmltreevérifie uniquement la bonne formation syntaxique. L'écosystèmeoxmlintègrexmlschemaavec 95,2 % de conformité W3C XSD. - Un Véritable Écosystème :
oxmlpropose un binaire CLI (oxml-cli), des liaisons WebAssembly (oxml-wasm), un serveur de langage (oxml-lsp) et un serveur Model Context Protocol pour agents IA (oxml-mcp).
Comparatif des Capacités
| Fonctionnalité | roxmltree | Écosystème oxml | Avantage |
|---|---|---|---|
Sécurité (#![forbid(unsafe_code)]) | Oui | Oui | Garantie identique : zéro bloc unsafe |
| Mutation de l'Arbre DOM | Non (Lecture seule) | Oui | Arène à recyclage générationnel d'emplacements |
| Sérialisation et Formatage XML | Non | Oui | Contrôle fin de l'indentation et des balises vides |
| Moteur XPath 1.0 | Non | Oui | 13 axes de navigation + fonctions standard |
| Conformité W3C XML Schema (XSD) | Non | Oui | 95,2 % de réussite sur 35 942 tests |
| Streaming Zéro-Copie | Emprunt de tranches | BorrowedEvent | Reader::next_borrowed() sans allocation |
| Outil en Ligne de Commande (CLI) | Non | Oui | Traitement en flux via oxml-cli |
| Outils pour Agents IA (MCP) | Non | Oui | 5 outils MCP pour Claude et Cursor |
Migration du Code
1. Analyse du Document et Accès aux Nœuds
Avec roxmltree :
use Document;
let text = "<book id='b1'>Dune</book></library>" ;
let doc = parse?;
// Parcours manuel obligatoire
for node in doc.descendants
Avec oxml :
use parse;
let text = "<book id='b1'>Dune</book></library>" ;
let doc = parse?;
// Parcours direct ou requête XPath déclarative
let root = doc.root_element.unwrap;
let book = doc.children;
assert_eq!;
assert_eq!;
// Ou directement avec XPath 1.0 :
let titles = doc.select?;
assert_eq!;
2. Modification de Nœuds et Sérialisation (Impossible avec roxmltree)
roxmltree ne permet aucune modification. Avec oxml :
use ;
let mut doc = parse?;
let root = doc.root_element.unwrap;
// Création et ajout d'un élément livre
let book = doc.create_element;
doc.set_attribute;
doc.append_child;
// Ajout du contenu textuel
let text = doc.create_text;
doc.append_child;
// Sérialisation du résultat formaté
let output = doc.serialize;
assert!;
3. Emprunt en Flux Zéro-Copie
Les deux bibliothèques supportent l'analyse sans allocation. Avec oxml, Reader::next_borrowed() produit des BorrowedEvent<'a> empruntant directement les chaînes depuis le tampon :
use ;
let mut reader = new?;
while let Some = reader.next_borrowed?