Работа с XML в JavaScript (Node.js): библиотеки, парсинг и создание
XML (eXtensible Markup Language) остаётся востребованным форматом для обмена данными в корпоративных системах, конфигурационных файлах и устаревших API. В экосистеме Node.js существует несколько зрелых библиотек, позволяющих эффективно парсить, создавать и трансформировать XML-документы. В этой статье мы рассмотрим три самые популярные библиотеки: fast-xml-parser, xml2js и libxmljs, а также покажем практические примеры их использования.
1. fast-xml-parser — быстрый и безопасный парсер
fast-xml-parser — одна из самых производительных библиотек для работы с XML в Node.js. Она поддерживает как синхронный, так и асинхронный парсинг, а также умеет валидировать XML-документы по XSD-схемам.
Установка
npm install fast-xml-parser
Пример парсинга XML в объект JavaScript
const { XMLParser } = require('fast-xml-parser');
const xmlData = `<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="programming">
<title lang="en">JavaScript: The Good Parts</title>
<author>Douglas Crockford</author>
<year>2008</year>
<price>29.99</price>
</book>
</bookstore>`;
const parser = new XMLParser({
ignoreAttributes: false,
attributeNamePrefix: '@_'
});
const result = parser.parse(xmlData);
console.log(JSON.stringify(result, null, 2));
Настройка ignoreAttributes: false позволяет сохранять атрибуты XML-тегов, а attributeNamePrefix добавляет префикс к именам атрибутов для предотвращения конфликтов с обычными тегами.
Создание XML из объекта
const { XMLBuilder } = require('fast-xml-parser');
const builder = new XMLBuilder({
format: true,
ignoreAttributes: false
});
const obj = {
bookstore: {
book: {
'@_category': 'programming',
title: { '@_lang': 'en', '#text': 'Clean Code' },
author: 'Robert C. Martin',
year: 2008,
price: 39.99
}
}
};
const xmlOutput = builder.build(obj);
console.log(xmlOutput);
2. xml2js — простой и надёжный конвертер
xml2js — классическая библиотека для преобразования XML в JSON и обратно. Она предоставляет простой API и хорошо документирована.
Установка
npm install xml2js
Парсинг XML с обработкой ошибок
const xml2js = require('xml2js');
const fs = require('fs');
const parser = new xml2js.Parser({
explicitArray: false, // не оборачивать одиночные элементы в массивы
trim: true,
normalizeTags: true // нормализовать регистр тегов
});
fs.readFile('config.xml', 'utf-8', (err, data) => {
if (err) {
console.error('Ошибка чтения файла:', err);
return;
}
parser.parseString(data, (parseErr, result) => {
if (parseErr) {
console.error('Ошибка парсинга XML:', parseErr);
return;
}
console.log('Параметры конфигурации:', result.configuration);
});
});
Создание XML с помощью xml2js
const xml2js = require('xml2js');
const builder = new xml2js.Builder({
xmldec: { version: '1.0', encoding: 'UTF-8' },
renderOpts: { pretty: true, indent: ' ' }
});
const obj = {
response: {
status: 'success',
data: {
user: {
id: 123,
name: 'Иван Петров',
email: 'ivan@example.com'
}
}
}
};
const xml = builder.buildObject(obj);
console.log(xml);
3. libxmljs — для продвинутой работы с XML
libxmljs — это нативная привязка к библиотеке libxml2, обеспечивающая максимальную производительность и поддержку XPath, XSLT и схем валидации.
Установка
npm install libxmljs2
Важно: Для установки могут потребоваться системные зависимости libxml2. На Ubuntu/Debian: sudo apt-get install libxml2-dev libxslt1-dev.
Парсинг и XPath-запросы
const libxml = require('libxmljs2');
const xml = `<?xml version="1.0"?>
<catalog>
<book id Также в библиотеке
Планировщик задач Swift для iOS/macOS: EventKit и DispatchSource
Работа с ZIP/архивами в Swift (iOS/macOS): полное руководство
HTTP-клиент для Rust: топ библиотек и инструментов
PDFKit для JavaScript (Node.js): полное руководство с примерами