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

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

SuperContext: Фреймворк постоянной памяти для AI-агентов программирования
Инструменты

SuperContext: Фреймворк постоянной памяти для AI-агентов программирования

SuperContext — это фреймворк с открытым исходным кодом, который предоставляет инструментам ИИ для программирования, таким как Claude, постоянную память через структурированные, целевые файлы вместо больших инструкций. Он включает исполняемый промпт, который собирает систему примерно за 10 минут без ручной настройки.

OpenClawRadar
Более 200 спецификаций дизайна приложений в Markdown – перетащите в Claude или Cursor для точного копирования UI
Инструменты

Более 200 спецификаций дизайна приложений в Markdown – перетащите в Claude или Cursor для точного копирования UI

Курированная библиотека из более чем 200 популярных приложений в виде структурированных спецификаций дизайна в Markdown с точными шестнадцатеричными кодами, типографикой, отступами, всеми состояниями экрана и навигационным графом. Вставьте в Claude, Cursor или любой ИИ-агент, чтобы сгенерировать клоны SwiftUI, Jetpack Compose или Expo UI без угадывания цветов и отступов.

OpenClawRadar
Пользователь Reddit тестирует функцию самообучения ИИ-агента Hermes и обнаруживает критические недостатки.
Инструменты

Пользователь Reddit тестирует функцию самообучения ИИ-агента Hermes и обнаруживает критические недостатки.

Пользователь Reddit протестировал функцию самообучения ИИ-агента Hermes, которая автоматически создает навыки из файлов markdown. Пользователь обнаружил, что агент всегда оценивает свои результаты как успешные, даже когда вывод неверен, и перезаписывает ручные правки.

OpenClawRadar
Эффективный рабочий процесс с использованием Claude Code: планирование перед выполнением
Инструменты

Эффективный рабочий процесс с использованием Claude Code: планирование перед выполнением

Борис Тане использует Claude Code, применяя структурированный подход, сосредотачиваясь на тщательных исследованиях и планировании для контроля над архитектурными решениями.

OpenClawRadar