Trabajo con XML en TypeScript: bibliotecas, análisis y creación de documentos XML

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con XML en TypeScript: bibliotecas y ejemplos prácticos



XML (eXtensible Markup Language) sigue siendo un formato demandado para el intercambio de datos, archivos de configuración e integración con sistemas heredados. A pesar de la popularidad de JSON, muchas soluciones empresariales, servicios SOAP y formatos de datos (por ejemplo, SVG, RSS, XSLT) todavía utilizan XML. En TypeScript, gracias al tipado estático, trabajar con XML se vuelve más fiable y predecible. En este artículo, analizaremos las mejores bibliotecas para analizar, crear y validar documentos XML en TypeScript.



Bibliotecas principales para trabajar con XML en TypeScript



Hoy en día, existen varias bibliotecas maduras que funcionan excelentemente con TypeScript. Consideremos las tres más populares:



  • fast-xml-parser — la biblioteca más rápida para analizar XML en JavaScript/TypeScript. Soporta validación, conversión a JSON y viceversa.
  • xml2js — una biblioteca clásica con una API simple, convierte XML en objetos de JavaScript. Tiene soporte integrado para TypeScript a través de @types/xml2js.
  • xmldom — una implementación de DOM Level 2 para Node.js, permite trabajar con XML como un árbol DOM (similar al DOMParser del navegador).


Instalación y configuración



Para empezar, instale una de las bibliotecas a través de npm:



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


Ahora veamos ejemplos prácticos para cada biblioteca.



Ejemplo 1: Análisis de XML con fast-xml-parser



fast-xml-parser ofrece un alto rendimiento y una API conveniente para convertir XML en objetos TypeScript comunes.



import { XMLParser, XMLBuilder, XMLValidator } from 'fast-xml-parser';

// XML de origenconst xmlData = `<?xml version="1.0" encoding="UTF-8"?><catalog> <book id="101"> <title>TypeScript Handbook</title> <author>Microsoft</author> <price currency="USD">29.99</price> </book> <book id="102"> <title>Node.js Design Patterns</title> <author>Mario Casciaro</author> <price currency="EUR">34.50</price> </book></catalog>`;

// Configuración del analizadorconst parser = new XMLParser({ ignoreAttributes: false, // Conservar atributos attributeNamePrefix: '@_', // Prefijo para atributos textNodeName: '#text', // Nombre para nodos de texto isArray: (tagName) => ['book'].includes(tagName) // Siempre devolver un array para <book>});

// Análisisconst result = parser.parse(xmlData);console.log(JSON.stringify(result, null, 2));

// Tipado del resultadointerface Book { '@_id': string; title: string; author: string; price: { '@_currency': string; '#text': string; };}

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

const catalog = result as Catalog;console.log(`Primer libro: ${catalog.catalog.book[0].title}`);


Tenga en cuenta el parámetro isArray — garantiza que el elemento book siempre será un array, incluso si en el XML solo aparece un libro.



Ejemplo 2: Creación de XML con xml2js



La biblioteca xml2js es útil para construir XML a partir de objetos de JavaScript. Utiliza Builder para la serialización.



import { Builder } from 'xml2js';

// Objeto para convertir a XMLconst data = { root: { $: { version: '1.0', encoding: 'UTF-8' }, user: [ { $: { id: '1', active: 'true' }, name: 'Iván Petrov', email: 'ivan@example.com', roles: { role: ['admin', 'editor'] } }, { $: { id: '2', active: 'false' }, name: 'María Sidorova', email: 'maria@example.com', roles: { role: ['viewer']

Recommendations