Xmloxide: Реализация libxml2 на Rust, созданная с помощью ИИ-агента

✍️ OpenClawRadar📅 Опубликовано: 1 марта 2026 г.🔗 Source
Xmloxide: Реализация libxml2 на Rust, созданная с помощью ИИ-агента
Ad

Что такое Xmloxide?

Xmloxide — это чистая реализация на языке Rust библиотеки libxml2, широко используемой C-библиотеки для парсинга, создания и манипулирования XML и HTML документами. Проект был создан после того, как libxml2 официально перестала поддерживаться в декабре 2025 года и имела известные проблемы с безопасностью. Разработчик использовал Claude Code для воспроизведения библиотеки, поручив ИИ-агенту работать над существующими тестовыми наборами до тех пор, пока они не были пройдены.

Ключевые особенности и возможности

  • Безопасность памяти — древовидная структура на основе арены без небезопасного кода в публичном API
  • Соответствие стандартам — 100% прохождение набора тестов на соответствие W3C XML (1727/1727 применимых тестов)
  • Восстановление после ошибок — парсинг некорректного XML с получением пригодного дерева, как в libxml2
  • Несколько API для парсинга — DOM дерево, потоковый SAX2, pull-парсер XmlReader, push/инкрементальный
  • HTML парсер — устойчивый к ошибкам парсинг HTML 4.01 с авто-закрытием и пустыми элементами
  • XPath 1.0 — полный парсер и вычислитель выражений со всеми основными функциями
  • Валидация — DTD, RelaxNG и XML Schema (XSD)
  • Канонический XML — сериализация C14N 1.0 и Exclusive C14N
  • XInclude — обработка включения документов
  • XML каталоги — OASIS XML Catalogs для разрешения URI
  • CLI инструмент xmllint — утилита командной строки для парсинга, валидации и запросов к XML
  • Отсутствие копирования где возможно — интернирование строк для быстрых сравнений
  • Отсутствие глобального состояния — каждый документ самодостаточен и Send + Sync
  • C/C++ FFI — полный C API с заголовочным файлом (include/xmloxide.h) для встраивания в C/C++ проекты
  • Минимальные зависимости — только encoding_rs (библиотека не имеет других зависимостей; clap только для CLI)

Производительность и совместимость

Производительность сравнима с libxml2 для большинства операций парсинга и лучше при сериализации. Библиотека проходит набор тестов на совместимость, а также набор тестов на соответствие W3C XML.

Ad

Примеры кода

Базовый парсинг:

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");

Сериализация:

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>");

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);

Потоковый 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();

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"));

Восстановление после ошибок:

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); }

Использование CLI

Инструмент командной строки xmllint предоставляет:

# Парсинг и красивое форматирование
xmllint --format document.xml

Валидация по схеме

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

Контекст разработки с ИИ-агентом

Разработчик экспериментировал с воспроизведением Redis и SQLite с помощью Claude Code, прежде чем взяться за libxml2. Подход заключался в том, чтобы поручить ИИ-агенту работать над проектами до тех пор, пока существующие тестовые наборы не будут пройдены. Это демонстрирует, как кодирующие агенты могут быстро итеративно работать при наличии тестового набора, потенциально решая проблемы поддержки устаревшего кода.

📖 Read the full source: HN AI Agents

Ad

👀 Смотрите также

ShareMyClaudeMD: Инструмент преобразует файлы Markdown, созданные Claude, в доступные для общего доступа отрендеренные страницы
Инструменты

ShareMyClaudeMD: Инструмент преобразует файлы Markdown, созданные Claude, в доступные для общего доступа отрендеренные страницы

Разработчик создал sharemyclaudemd.com — бесплатный инструмент, который преобразует любой файл Markdown в живую, отрендеренную страницу с доступной для общего доступа ссылкой и QR-кодом. Инструмент решает проблему сложности обмена файлами Markdown, сгенерированными Claude, что часто требует от получателей открывать их в специальном редакторе или загружать на GitHub только для просмотра в отрендеренном виде.

OpenClawRadar
Скрипт PowerShell автоматизирует настройку OpenClaw Docker в Windows
Инструменты

Скрипт PowerShell автоматизирует настройку OpenClaw Docker в Windows

Скрипт PowerShell обрабатывает специфичные для Windows особенности сетевых настроек и конфигурацию Docker для OpenClaw, автоматизируя проверки, получение образов, руководство по настройке и развертывание контейнеров.

OpenClawRadar
Тесты локальных LLM на RTX 5060 Ti 16 ГБ: Модели на 30 млрд параметров по-прежнему лидируют в программировании.
Инструменты

Тесты локальных LLM на RTX 5060 Ti 16 ГБ: Модели на 30 млрд параметров по-прежнему лидируют в программировании.

Тесты на RTX 5060 Ti 16GB показывают, что модель Unsloth Qwen3-Coder-30B UD-Q3_K_XL достигает 76.3 ток/с на Ubuntu с оценкой качества 8.14, что делает её рекомендуемой моделью по умолчанию для кодирования. Модель Unsloth Qwen3.5-35B UD-Q2_K_XL достигает 80.1 ток/с, но с более низкими оценками качества.

OpenClawRadar
Плагин AxonFlow для OpenClaw: Предварительное утверждение инструментов и удаление личных данных
Инструменты

Плагин AxonFlow для OpenClaw: Предварительное утверждение инструментов и удаление личных данных

Самостоятельно размещаемый плагин OpenClaw, который проверяет аргументы инструментов до выполнения, приостанавливает рискованные вызовы для одобрения человеком и удаляет PII из исходящих сообщений. Использует перехватчики жизненного цикла OpenClaw — без изменения кода агента.

OpenClawRadar