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

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

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

Начать курс

Введение в обработку 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                    

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