Обработка и парсинг XML в TypeScript: библиотеки и практические примеры

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

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

Начать курс

Работа с XML в TypeScript: от парсинга до генерации

XML (eXtensible Markup Language) остаётся одним из ключевых форматов для обмена данными, конфигурационных файлов и документооборота. В экосистеме TypeScript доступно несколько мощных библиотек, которые позволяют эффективно работать с XML, сохраняя строгую типизацию и преимущества статического анализа. В этой статье мы рассмотрим основные инструменты, их возможности и приведём практические примеры использования.

Почему стоит использовать TypeScript для работы с XML?

TypeScript добавляет к JavaScript систему типов, что особенно полезно при работе с XML-документами сложной структуры. Вы можете описывать схемы данных через интерфейсы, избегать ошибок при доступе к вложенным элементам и автоматически получать автодополнение в IDE. Кроме того, современные библиотеки для работы с XML имеют декларации типов (типизацию), что делает их использование максимально безопасным.

Основные библиотеки для работы с XML в TypeScript

  • fast-xml-parser — самая быстрая и функциональная библиотека. Поддерживает парсинг в объект/массив, валидацию, работу с атрибутами, CDATA и пространствами имён.
  • xml2js — классический парсер, преобразующий XML в JavaScript-объекты. Есть поддержка асинхронного парсинга и кастомных опций.
  • xmldom — реализация DOM-парсера для Node.js и браузера. Позволяет манипулировать XML-деревом как в браузерном DOM.
  • xmlbuilder2 — современная библиотека для создания XML-документов с цепочечным API и полной поддержкой типов.

Установка библиотек

Для начала работы установите одну из библиотек через npm. Все они имеют встроенные декларации типов:

npm install fast-xml-parser
npm install xml2js
npm install @xmldom/xmldom
npm install xmlbuilder2

Пример 1: Парсинг XML с помощью fast-xml-parser

Рассмотрим базовый пример разбора XML-строки в типизированный объект:

import { XMLParser } from 'fast-xml-parser';

interface Book {
  title: string;
  author: string;
  year: number;
  price?: number;
}

interface Catalog {
  catalog: {
    book: Book | Book[];
  };
}

const xmlData = `
  <catalog>
    <book>
      <title>TypeScript Handbook</title>
      <author>Microsoft</author>
      <year>2023</year>
    </book>
    <book>
      <title>XML for Developers</title>
      <author>John Doe</author>
      <year>2022</year>
      <price>29.99</price>
    </book>
  </catalog>
`;

const parser = new XMLParser({
  ignoreAttributes: false,
  attributeNamePrefix: '@_',
  isArray: (name) => name === 'book',
});

const result: Catalog = parser.parse(xmlData);
console.log(result.catalog.book[0].title); // "TypeScript Handbook"

Обратите внимание на опцию isArray — она гарантирует, что элемент book всегда будет массивом, даже если в XML только одна книга. Это упрощает дальнейшую обработку.

Пример 2: Создание XML с помощью xmlbuilder2

Библиотека xmlbuilder2 предоставляет удобный цепочечный интерфейс для генерации XML:

import { create } from 'xmlbuilder2';

interface User {
  id: number;
  name: string;
  email: string;
}

const user: User = {
  id: 42,
  name: 'Alice',
  email: 'alice@example.com'
};

const doc = create({ version: '1.0', encoding: 'UTF-8' })
  .ele('users')
    .ele('user', { id: user.id.toString() })
      .ele('name').txt(user.name).up()
      .ele('email').txt(user.email).up()
    .up()
  .up();

const xmlString: string = doc.end({ prettyPrint: true });
console.log(xmlString);
/*
<?xml version="1.0" encoding="UTF-8"?>
<users>
  <user id="42">
    <name>Alice</name>
    <email>alice@example.com</email>
  </user>
</users>
*/

Метод .up() поднимается на один уровень вверх по дереву, что позволяет строить вложенные структуры без лишних переменных.

Пример 3: Валидация XML с помощью fast-xml-parser

Библиотека fast-xml-parser включает встроенный валидатор, который проверяет корректность XML-синтаксиса:

import {                    

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