Xmloxide: Una Reimplementación en Rust de libxml2 Creada con Asistencia de Agente de IA

¿Qué es Xmloxide?
Xmloxide es una reimplementación en Rust puro de libxml2, la biblioteca C ampliamente utilizada para analizar, crear y manipular documentos XML y HTML. El proyecto se creó después de que libxml2 quedara oficialmente sin mantenimiento en diciembre de 2025 con problemas de seguridad conocidos. El desarrollador utilizó Claude Code para reproducir la biblioteca haciendo que el agente de IA trabajara contra las suites de pruebas existentes hasta que pasaran.
Características y capacidades clave
- Seguro en memoria — árbol basado en arena sin código inseguro en la API pública
- Conforme — tasa de aprobación del 100% en la Suite de Pruebas de Conformidad XML del W3C (1727/1727 pruebas aplicables)
- Recuperación de errores — analizar XML mal formado y aún así producir un árbol utilizable, al igual que libxml2
- Múltiples API de análisis — árbol DOM, transmisión SAX2, extracción XmlReader, inserción/incremental
- Analizador HTML — análisis tolerante a errores de HTML 4.01 con cierre automático y elementos vacíos
- XPath 1.0 — analizador de expresiones completo y evaluador con todas las funciones principales
- Validación — validación DTD, RelaxNG y Esquema XML (XSD)
- XML canónico — serialización C14N 1.0 y C14N Exclusiva
- XInclude — procesamiento de inclusión de documentos
- Catálogos XML — Catálogos XML OASIS para resolución de URI
- CLI xmllint — herramienta de línea de comandos para analizar, validar y consultar XML
- Sin copia donde sea posible — internamiento de cadenas para comparaciones rápidas
- Sin estado global — cada Documento es autónomo y Send + Sync
- FFI C/C++ — API C completa con archivo de encabezado (include/xmloxide.h) para integración en proyectos C/C++
- Dependencias mínimas — solo encoding_rs (la biblioteca tiene cero otras dependencias; clap es solo para CLI)
Rendimiento y compatibilidad
El rendimiento es similar al de libxml2 en la mayoría de las operaciones de análisis y mejor en la serialización. La biblioteca pasa la suite de compatibilidad, así como la Suite de Pruebas de Conformidad XML del W3C.
Ejemplos de código
Análisis básico:
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");
Serialización:
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>");
Consultas 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);
Transmisión 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!("Element: {name}");
}
}
parse_sax("<root><child/></root>", &ParseOptions::default(), &mut MyHandler).unwrap();
Análisis 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"));
Recuperación de errores:
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);
}
Uso de CLI
La herramienta CLI xmllint proporciona:
# Analizar y formatear
xmllint --format document.xml
Validar contra un esquema
xmllint --schema schema.xsd document.xml
xmllint --relaxng schema.rng document.xml
xmllint --dtdvalid
Contexto de desarrollo del agente de IA
El desarrollador experimentó haciendo que Claude Code reprodujera Redis y SQLite antes de apuntar a libxml2. El enfoque consistió en encargar al agente de IA que trabajara en proyectos hasta que las suites de pruebas existentes pasaran. Esto demuestra cómo los agentes de codificación pueden iterar rápidamente dada una suite de pruebas, abordando potencialmente problemas de mantenimiento de código heredado.
📖 Leer la fuente completa: HN AI Agents
👀 Ver también

Resultados de Referencia: El Sistema de Enjambre de Agentes Claude con Memoria Muestra un Ahorro de Costos de Tokens del 30-43%
Un desarrollador probó un enjambre de 6 agentes Claude en una tarea de codificación de 40 puntos con y sin un sistema de memoria personalizado llamado Stompy. Los resultados muestran que Sonnet 4.6 con memoria obtuvo puntuaciones perfectas por $3.98 frente a $7.04 sin memoria, mientras que Haiku 4.5 falló completamente sin memoria pero obtuvo 39/40 con ella.

Destino: Plugin de Claude Code para Adivinación Determinista Usando Astrología Clásica de Asia Oriental
Destiny es un plugin para Claude Code que calcula tu carta astral de ocho caracteres, el pilar del día actual y el hexagrama del I-Ching de forma determinista (Python), y luego usa Claude para generar lecturas en prosa, sin horóscopos alucinados por el LLM.

OpenYak: Agente de IA de escritorio de código abierto para gestión y automatización de archivos locales
OpenYak es un asistente de IA de escritorio de código abierto que se ejecuta completamente en tu máquina, ofreciendo gestión de archivos, análisis de datos y automatización de oficina con más de 100 modelos de IA a través de OpenRouter y más de 20 proveedores BYOK.

Aplicación de la Bandeja del Sistema de Windows para el Monitoreo en Tiempo Real del Uso de la API de Claude
Un desarrollador creó una aplicación ligera para la bandeja del sistema de Windows que muestra el uso de la cuota de la API de Claude en tiempo real, incluyendo ventanas de 5 horas y 7 días, recuentos de tokens de hoy y pronósticos de agotamiento. La aplicación admite interfaz de usuario en coreano, inglés, chino y japonés y es de código abierto en GitHub.