Trabajo con XML en JavaScript (Node.js): bibliotecas, análisis y creación
XML (eXtensible Markup Language) sigue siendo un formato demandado para el intercambio de datos en sistemas corporativos, archivos de configuración y API heredadas. En el ecosistema de Node.js existen varias bibliotecas maduras que permiten analizar, crear y transformar documentos XML de manera eficiente. En este artículo, revisaremos las tres bibliotecas más populares: fast-xml-parser, xml2js y libxmljs, y mostraremos ejemplos prácticos de su uso.
1. fast-xml-parser — analizador rápido y seguro
fast-xml-parser es una de las bibliotecas más eficientes para trabajar con XML en Node.js. Soporta tanto análisis síncrono como asíncrono, y también puede validar documentos XML contra esquemas XSD.
Instalación
npm install fast-xml-parserEjemplo de análisis de XML a objeto JavaScript
const { XMLParser } = require('fast-xml-parser');
const xmlData = `<?xml version="1.0" encoding="UTF-8"?><bookstore> <book category="programming"> <title lang="en">JavaScript: The Good Parts</title> <author>Douglas Crockford</author> <year>2008</year> <price>29.99</price> </book></bookstore>`;
const parser = new XMLParser({ ignoreAttributes: false, attributeNamePrefix: '@_'});
const result = parser.parse(xmlData);console.log(JSON.stringify(result, null, 2));La configuración ignoreAttributes: false permite conservar los atributos de las etiquetas XML, y attributeNamePrefix añade un prefijo a los nombres de los atributos para evitar conflictos con las etiquetas normales.
Creación de XML a partir de un objeto
const { XMLBuilder } = require('fast-xml-parser');
const builder = new XMLBuilder({ format: true, ignoreAttributes: false});
const obj = { bookstore: { book: { '@_category': 'programming', title: { '@_lang': 'en', '#text': 'Clean Code' }, author: 'Robert C. Martin', year: 2008, price: 39.99 } }};
const xmlOutput = builder.build(obj);console.log(xmlOutput);2. xml2js — convertidor simple y confiable
xml2js es una biblioteca clásica para convertir XML a JSON y viceversa. Proporciona una API simple y está bien documentada.
Instalación
npm install xml2jsAnálisis de XML con manejo de errores
const xml2js = require('xml2js');const fs = require('fs');
const parser = new xml2js.Parser({ explicitArray: false, // no envolver elementos individuales en arrays trim: true, normalizeTags: true // normalizar mayúsculas/minúsculas de las etiquetas});
fs.readFile('config.xml', 'utf-8', (err, data) => { if (err) { console.error('Error al leer el archivo:', err); return; } parser.parseString(data, (parseErr, result) => { if (parseErr) { console.error('Error al analizar XML:', parseErr); return; } console.log('Parámetros de configuración:', result.configuration); });});Creación de XML con xml2js
const xml2js = require('xml2js');
const builder = new xml2js.Builder({ xmldec: { version: '1.0', encoding: 'UTF-8' }, renderOpts: { pretty: true, indent: ' ' }});
const obj = { response: { status: 'success', data: { user: { id: 123, name: 'Iván Petrov', email: 'ivan@example.com' } } }};
const xml = builder.buildObject(obj);console.log(xml);3. libxmljs — para trabajo avanzado con XML
l