Работа с XML в JavaScript (Node.js): библиотеки и примеры

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с 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                    

Рекомендаций