Introducción al trabajo con XML en el entorno Node.js
XML (eXtensible Markup Language) sigue siendo un formato demandado para almacenar y transmitir datos estructurados, especialmente en sistemas corporativos, protocolos médicos y API heredadas. En el ecosistema Node.js existen varias bibliotecas maduras que permiten analizar, crear y modificar documentos XML de manera eficiente. En este artículo, exploraremos las herramientas clave: fast-xml-parser, xml2js, xmlbuilder2 y xpath.
Instalación de los paquetes necesarios
Para empezar, instale los paquetes a través de npm:
npm install fast-xml-parser xml2js xmlbuilder2 xpath1. Análisis de XML con fast-xml-parser
fast-xml-parser es la biblioteca de mayor rendimiento para analizar XML en JavaScript. Soporta atributos, espacios de nombres y conversión a JSON.
Análisis básico
const { XMLParser } = require('fast-xml-parser');
const xmlData = `<bookstore> <book category="fiction"> <title lang="en">The Great Gatsby</title> <author>F. Scott Fitzgerald</author> <year>1925</year> </book></bookstore>`;
const parser = new XMLParser({ ignoreAttributes: false, // Conservar atributos attributeNamePrefix: '@_' // Prefijo para atributos});
const result = parser.parse(xmlData);console.log(result.bookstore.book[0].title);// 'The Great Gatsby'console.log(result.bookstore.book[0]['@_category']);// 'fiction'Análisis con verificación de errores
const { XMLParser, XMLValidator } = require('fast-xml-parser');
const invalidXml = '<root><item>Unclosed';
if (XMLValidator.validate(invalidXml) === true) { const parser = new XMLParser(); const data = parser.parse(invalidXml);} else { console.error('XML no válido'); // Salida: true (si es válido) u objeto de error}2. Biblioteca xml2js — conversión conveniente a JSON
xml2js proporciona una API basada en callbacks y soporta configuraciones personalizadas de análisis.
const xml2js = require('xml2js');const parser = new xml2js.Parser({ explicitArray: false, // No envolver elementos individuales en un array attrkey: 'attributes'});
const xml = `<person id="123"> <name>John Doe</name> <age>30</age></person>`;
parser.parseString(xml, (err, result) => { if (err) { console.error('Error de análisis:', err); return; } console.log(result.person.name); // 'John Doe' console.log(result.person.attributes.id); // '123'});Envoltorio de promesa para xml2js
const { parseStringPromise } = require('xml2js');
async function parseXML(xmlString) { try { const data = await parseStringPromise(xmlString, { explicitArray: false }); return data; } catch (error) { console.error('Error:', error.message); }}3. Creación de XML con xmlbuilder2
xmlbuilder2 es una biblioteca moderna para generar documentos XML con una interfaz encadenada (fluent API).
Creación simple de XML
const { create } = require('xmlbuilder2');
const doc = create({ version: '1.0', encoding: 'UTF-8' }) .ele('catalog') .ele('book', { id: 'b1' }) .ele('title').txt('JavaScript: The Good Parts').up() .ele('author').txt('Douglas Crockford').up() .ele('price', { currency: 'USD' }).txt('29.99').up() .up() .end({ prettyPrint: true });
console.log(doc);Resultado:
<?xml version="1.0" encoding="UTF-8"?><catalog> <book id="b1"> &l