Введение в обработку XML в среде Node.js
XML (eXtensible Markup Language) остаётся востребованным форматом для хранения и передачи структурированных данных, особенно в корпоративных системах, SOAP-сервисах, конфигурационных файлах и интеграционных решениях. В экосистеме Node.js существует несколько зрелых библиотек, позволяющих эффективно парсить, создавать и модифицировать XML-документы. В данной статье мы рассмотрим три основных инструмента: xml2js (для конвертации XML в JSON и обратно), fast-xml-parser (высокопроизводительный парсер) и xmldom (реализация DOM Level 2 для Node.js).
1. Библиотека xml2js: простота и универсальность
xml2js — одна из самых популярных библиотек для работы с XML в Node.js. Её главная задача — преобразовывать XML в JavaScript-объекты (JSON) и обратно. Это идеальный выбор, когда вам нужно быстро интегрировать XML-данные в современное JavaScript-приложение.
Установка
npm install xml2js
Пример: парсинг XML в JSON
const xml2js = require('xml2js');
const parser = new xml2js.Parser({ explicitArray: false });
const xmlData = `<bookstore>
<book category="programming">
<title lang="en">Learning Node.js</title>
<author>John Doe</author>
<price>29.99</price>
</book>
</bookstore>`;
parser.parseString(xmlData, (err, result) => {
if (err) {
console.error('Ошибка парсинга:', err);
return;
}
console.log(JSON.stringify(result, null, 2));
// Вывод: { bookstore: { book: { category: "programming", title: "Learning Node.js", author: "John Doe", price: "29.99" } } }
});
Пример: создание XML из JSON
const xml2js = require('xml2js');
const builder = new xml2js.Builder({ headless: true });
const jsonObj = {
root: {
$: { xmlns: "http://example.com/ns" },
item: [
{ $: { id: "1" }, _: "Первый элемент" },
{ $: { id: "2" }, _: "Второй элемент" }
]
}
};
const xml = builder.buildObject(jsonObj);
console.log(xml);
/* Вывод:
<root xmlns="http://example.com/ns">
<item id="1">Первый элемент</item>
<item id="2">Второй элемент</item>
</root>
*/
Ключевые возможности:
- Автоматическое преобразование атрибутов (префикс
$) и текстового содержимого (префикс_) - Настройка парсера:
explicitArray,explicitRoot,attrkey,charkey - Поддержка пространств имён (namespaces)
- Обработка больших файлов через стримы (потоковый парсинг)
2. fast-xml-parser: производительность и гибкость
Если вам нужна максимальная скорость парсинга (например, при обработке тысяч XML-файлов или в real-time приложениях), обратите внимание на fast-xml-parser. Этот парсер написан на чистом JavaScript, но оптимизирован для высокой производительности.
Установка
npm install fast-xml-parser
Пример: быстрый парсинг с валидацией
const { XMLParser, XMLBuilder, XMLValidator } = require('fast-xml-parser');
const xmlData = `<config>
<database host="localhost" port="5432">
<user>admin</user>
<password>secret</password>
</database>
</config>`;
// Проверка валидности
const validationResult = XMLValidator.validate(xmlData);
if (validationResult !== true) {
console.error('XML невалиден:', validationResult.err);
process.exit(1);
}
// Парсинг
const parser = new XMLParser({
ignoreAttributes: false,
attributeNamePrefix: "@_"
});
const jsonObj = parser.parse(xmlData);
console.log(jsonObj.config.database["@_host"]); // localhost
console.log(jsonObj.config.database.user); // admin
Пример: обратное преобразование
const { XMLBuilder } = require('fast-xml-parser');
const builder = new XMLBuilder({
format: true,
ignoreAttributes: false
});
const obj = {
response: {
status: "success",
data: {
item: [
{ "@_id": "1", "#text": "Запись 1" },
{ "@_id Также в библиотеке
ORM для Java: сравнение Hibernate, MyBatis и JPA с примерами
Обработка JSON в Kotlin: библиотеки, парсинг и сериализация
Конфигурация приложений на C++: библиотеки и инструменты для гибкой настройки
Gorilla Mux для Go: полное руководство с примерами
ts-morph для TypeScript: полное руководство с примерами