Introdução ao trabalho com XML no ambiente Node.js
XML (eXtensible Markup Language) continua sendo um formato relevante para armazenar e transmitir dados estruturados, especialmente em sistemas corporativos, protocolos médicos e APIs legadas. No ecossistema Node.js, existem várias bibliotecas maduras que permitem analisar, criar e modificar documentos XML de forma eficiente. Neste artigo, abordaremos as principais ferramentas: fast-xml-parser, xml2js, xmlbuilder2 e xpath.
Instalação dos pacotes necessários
Para começar, instale os pacotes via npm:
npm install fast-xml-parser xml2js xmlbuilder2 xpath1. Parsing de XML com fast-xml-parser
fast-xml-parser é a biblioteca de melhor desempenho para análise de XML em JavaScript. Ela suporta atributos, namespaces e conversão para JSON.
Parsing 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, // Manter atributos attributeNamePrefix: '@_' // Prefixo 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'Parsing com verificação de erros
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 inválido'); // Saída: true (se válido) ou objeto de erro}2. Biblioteca xml2js — conversão conveniente para JSON
xml2js fornece uma API orientada a callbacks e suporta configurações personalizadas de parsing.
const xml2js = require('xml2js');const parser = new xml2js.Parser({ explicitArray: false, // Elementos únicos não são envolvidos em 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('Erro de parsing:', err); return; } console.log(result.person.name); // 'John Doe' console.log(result.person.attributes.id); // '123'});Wrapper de Promise para xml2js
const { parseStringPromise } = require('xml2js');
async function parseXML(xmlString) { try { const data = await parseStringPromise(xmlString, { explicitArray: false }); return data; } catch (error) { console.error('Erro:', error.message); }}3. Criação de XML com xmlbuilder2
xmlbuilder2 é uma biblioteca moderna para geração de documentos XML com interface encadeada (fluent API).
Criação simples 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 Também na biblioteca
Filas de tarefas para PHP: RabbitMQ, Beanstalkd e Gearman
Aprendizado de Máquina em C# (.NET): visão geral das bibliotecas ML.NET, Accord.NET, TensorFlow.NET
Cache em TypeScript: biblioteca node-cache
frozen para C++: guia completo com exemplos práticos
GraphQL em C++: biblioteca cppgraphqlgen para criação de APIs