Xmloxide : Une réimplémentation en Rust de libxml2 créée avec l'assistance d'un agent IA

✍️ OpenClawRadar📅 Publié: March 1, 2026🔗 Source
Xmloxide : Une réimplémentation en Rust de libxml2 créée avec l'assistance d'un agent IA
Ad

Qu'est-ce que Xmloxide ?

Xmloxide est une réimplémentation pure en Rust de libxml2, la bibliothèque C largement utilisée pour analyser, créer et manipuler des documents XML et HTML. Le projet a été créé après que libxml2 est devenu officiellement non maintenu en décembre 2025 avec des problèmes de sécurité connus. Le développeur a utilisé Claude Code pour reproduire la bibliothèque en faisant travailler l'agent d'IA sur les suites de tests existantes jusqu'à ce qu'elles soient réussies.

Fonctionnalités et capacités clés

  • Sécurisé en mémoire — arbre basé sur une arène avec zéro code unsafe dans l'API publique
  • Conforme — taux de réussite de 100 % sur la suite de tests de conformité XML du W3C (1727/1727 tests applicables)
  • Récupération d'erreurs — analyse du XML mal formé et production d'un arbre utilisable, comme libxml2
  • Plusieurs API d'analyse — arbre DOM, streaming SAX2, extraction XmlReader, push/incrémental
  • Analyseur HTML — analyse HTML 4.01 tolérante aux erreurs avec fermeture automatique et éléments vides
  • XPath 1.0 — analyseur d'expressions complet et évaluateur avec toutes les fonctions de base
  • Validation — validation DTD, RelaxNG et XML Schema (XSD)
  • XML canonique — sérialisation C14N 1.0 et C14N exclusive
  • XInclude — traitement de l'inclusion de documents
  • Catalogues XML — catalogues XML OASIS pour la résolution d'URI
  • CLI xmllint — outil en ligne de commande pour analyser, valider et interroger le XML
  • Zéro copie quand possible — internement de chaînes pour des comparaisons rapides
  • Aucun état global — chaque Document est autonome et Send + Sync
  • FFI C/C++ — API C complète avec fichier d'en-tête (include/xmloxide.h) pour intégration dans des projets C/C++
  • Dépendances minimales — uniquement encoding_rs (la bibliothèque n'a aucune autre dépendance ; clap est uniquement pour la CLI)

Performance et compatibilité

Les performances sont similaires à celles de libxml2 pour la plupart des opérations d'analyse et meilleures pour la sérialisation. La bibliothèque réussit la suite de compatibilité ainsi que la suite de tests de conformité XML du W3C.

Ad

Exemples de code

Analyse de base :

use xmloxide::Document;

let doc = Document::parse_str("<root><child>Hello</child></root>").unwrap(); let root = doc.root_element().unwrap(); assert_eq!(doc.node_name(root), Some("root")); assert_eq!(doc.text_content(root), "Hello");

Sérialisation :

use xmloxide::Document;
use xmloxide::serial::serialize;

let doc = Document::parse_str("<root><child>Hello</child></root>").unwrap(); let xml = serialize(&doc); assert_eq!(xml, "<root><child>Hello</child></root>");

Requêtes XPath :

use xmloxide::Document;
use xmloxide::xpath::{evaluate, XPathValue};

let doc = Document::parse_str("<library><book><title>Rust</title></book></library>").unwrap(); let root = doc.root_element().unwrap(); let result = evaluate(&doc, root, "count(book)").unwrap(); assert_eq!(result.to_number(), 1.0);

Streaming SAX2 :

use xmloxide::sax::{parse_sax, SaxHandler, DefaultHandler};
use xmloxide::parser::ParseOptions;

struct MyHandler;

impl SaxHandler for MyHandler { fn start_element(&mut self, name: &str, _: Option<&str>, _: Option<&str>, _: &[(String, String, Option<String>, Option<String>)]) { println!("Élément : {name}"); } }

parse_sax("<root><child/></root>", &ParseOptions::default(), &mut MyHandler).unwrap();

Analyse HTML :

use xmloxide::html::parse_html;

let doc = parse_html("<p>Hello <br> World").unwrap(); let root = doc.root_element().unwrap(); assert_eq!(doc.node_name(root), Some("html"));

Récupération d'erreurs :

use xmloxide::parser::{parse_str_with_options, ParseOptions};

let opts = ParseOptions::default().recover(true); let doc = parse_str_with_options("<root><unclosed>", &opts).unwrap(); for diag in &doc.diagnostics { eprintln!("{}", diag); }

Utilisation de la CLI

L'outil CLI xmllint fournit :

# Analyser et formater joliment
xmllint --format document.xml

Valider par rapport à un schéma

xmllint --schema schema.xsd document.xml xmllint --relaxng schema.rng document.xml xmllint --dtdvalid

Contexte de développement avec agent d'IA

Le développeur a expérimenté la reproduction de Redis et SQLite avec Claude Code avant de cibler libxml2. L'approche consistait à charger l'agent d'IA de travailler sur des projets jusqu'à ce que les suites de tests existantes soient réussies. Cela démontre comment les agents de codage peuvent itérer rapidement avec une suite de tests, potentiellement en abordant les problèmes de maintenance du code hérité.

📖 Lire la source complète : HN AI Agents

Ad

👀 See Also

MuninnDB ajoute Dream Engine pour la consolidation de la mémoire LLM avec isolation des coffres-forts.
Tools

MuninnDB ajoute Dream Engine pour la consolidation de la mémoire LLM avec isolation des coffres-forts.

MuninnDB, une base de données de mémoire cognitive basée sur Go, intègre désormais un Moteur de Rêve qui effectue une consolidation de mémoire pilotée par LLM entre les sessions en utilisant des seuils de déduplication et une revue sémantique. Le système propose des niveaux de confiance de coffre-fort pour l'isolation des données et fonctionne localement avec Ollama.

OpenClawRadar
HN : WUPHF — Wiki LLM style Karpathy avec Markdown + Git comme source de vérité
Tools

HN : WUPHF — Wiki LLM style Karpathy avec Markdown + Git comme source de vérité

WUPHF fournit une couche wiki pour les agents IA utilisant Markdown + Git pour la persistance, bleve (BM25) + SQLite pour la recherche, avec des journaux de faits par entité, des wikiliens et un cron de lint quotidien. Fonctionne en local sans dépendance à une base vectorielle pour l'instant.

OpenClawRadar
Système de bandit contextuel auto-hébergé en Rust : Syntra et Lycan pour des systèmes de décision adaptatifs
Tools

Système de bandit contextuel auto-hébergé en Rust : Syntra et Lycan pour des systèmes de décision adaptatifs

Deux projets open-source : Lycan (langage d'exécution de graphes avec nœuds de stratégie et poids appris) et Syntra (appliance Docker/API servant des capsules Lycan compilées). Des bugs de pipeline de données découverts avant les bugs d'exécution lors d'un dogfooding sur un produit de débat boursier IA.

OpenClawRadar
Libretto : Génération Déterministe d'Automatisation de Navigateur pour les Agents d'IA de Programmation
Tools

Libretto : Génération Déterministe d'Automatisation de Navigateur pour les Agents d'IA de Programmation

Libretto est une boîte à outils Skill+CLI qui permet aux agents d'IA de codage de générer des scripts d'automatisation de navigateur déterministes sous forme de code réel, s'éloignant des agents d'IA en temps d'exécution. Il combine l'automatisation d'interface utilisateur Playwright avec des requêtes réseau/API directes pour la fiabilité et inclut des modes de débogage pas à pas et en lecture seule.

OpenClawRadar