Trabalhando com XML em JavaScript (Node.js): parsing, criação e validação

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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 xpath


1. 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                    

Recommendations