Trabajo con XML en TypeScript: bibliotecas para analizar y crear 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: descripción general de bibliotecas y ejemplos prácticos



XML (eXtensible Markup Language) sigue siendo un formato popular para el intercambio de datos en sistemas empresariales, archivos de configuración y servicios web (SOAP, RSS/Atom). En TypeScript, gracias al tipado estático, trabajar con XML se vuelve más seguro y predecible. En este artículo, analizaremos tres bibliotecas principales para trabajar con XML en TypeScript: fast-xml-parser, xml2js y xmlbuilder2. Aprenderá cómo analizar XML, crear documentos XML y validar su estructura.



1. Instalación y configuración



Para comenzar, instale una o más bibliotecas a través de npm:



npm install fast-xml-parser xml2js xmlbuilder2npm install -D @types/xml2js  // tipos para xml2js (para fast-xml-parser los tipos están integrados)


2. Análisis de XML con fast-xml-parser



fast-xml-parser es la biblioteca más rápida para analizar XML en JavaScript/TypeScript. Admite el trabajo con atributos, espacios de nombres y puede convertir XML a JSON.



Análisis básico



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

const xmlString = `<bookstore> <book category="fiction"> <title>Guerra y Paz</title> <author>León Tolstói</author> <price currency="RUB">1200</price> </book></bookstore>`;

const parser = new XMLParser({ ignoreAttributes: false, // conservar atributos attributeNamePrefix: '@_', // prefijo para atributos});

const result = parser.parse(xmlString);console.log(result);


El resultado será un objeto:



{  bookstore: {    book: {      '@_category': 'fiction',      title: 'Guerra y Paz',      author: 'León Tolstói',      price: {        '@_currency': 'RUB',        '#text': '1200'      }    }  }}


Análisis con tipado



interface Book {  '@_category': string;  title: string;  author: string;  price: {    '@_currency': string;    '#text': number;  };}

interface Bookstore { bookstore: { book: Book | Book[]; };}

const typedResult = parser.parse(xmlString) as Bookstore;console.log(typedResult.bookstore.book);


3. Análisis de XML con xml2js



xml2js es una biblioteca con capacidades más avanzadas, que incluye soporte para funciones de proceso y transformaciones personalizadas. Funciona de forma asíncrona.



Análisis asíncrono



import { parseStringPromise } from 'xml2js';

interface XmlBook { $: { category: string }; title: string[]; author: string[]; price: Array<{ $: { currency: string }, _: string }>;}

async function parseXmlData(xml: string): Promise<void> { try { const result = await parseStringPromise(xml, { explicitArray: false, // no envolver elementos individuales en arrays attrkey: '$', // clave para atributos charkey: '_' // clave para contenido de texto }); const book = result.bookstore.book as XmlBook; console.log(`Libro: ${book.title}, autor: ${book.author}`); console.log(`Precio: ${book.price._} ${book.price.$.currency}`); } catch (error) { console.error('Error al analizar XML:', error); }}

parseXmlData(xmlString);


4. Creación de XML con xmlbuilder2



xmlbuilder2 es una biblioteca moderna para crear documentos XML con soporte para TypeScript. Proporciona una API encadenada y escape automático.



Creación de XML simple



import { create } from 'xmlbuilder2';

const xml = create({ version: '1.0', encoding: 'UTF-8' }) .ele('catalog') .ele('book', { id: '1', category: 'fiction' }) .ele('title').txt('Crimen y castigo').up() .ele('author').tx

Recommendations