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 También en la biblioteca
Pruebas en Swift (iOS/macOS): frameworks y herramientas
Cliente Elasticsearch para Node.js: @elastic/elasticsearch
Rector para PHP: guía completa con ejemplos prácticos
Aprendizaje automático en Java: revisión de bibliotecas para desarrollo de modelos