Trabalhando com XML em TypeScript: bibliotecas e exemplos práticos
XML (eXtensible Markup Language) continua sendo um formato popular para troca de dados, arquivos de configuração e integração com sistemas legados. Apesar da popularidade do JSON, muitas soluções empresariais, serviços SOAP e formatos de dados (por exemplo, SVG, RSS, XSLT) ainda usam XML. Em TypeScript, graças à tipagem estática, trabalhar com XML se torna mais confiável e previsível. Neste artigo, abordaremos as melhores bibliotecas para parsing, criação e validação de documentos XML em TypeScript.
Principais bibliotecas para trabalhar com XML em TypeScript
Atualmente, existem várias bibliotecas maduras que funcionam muito bem com TypeScript. Vamos considerar as três mais populares:
- fast-xml-parser — a biblioteca mais rápida para parsing de XML em JavaScript/TypeScript. Suporta validação, conversão para JSON e vice-versa.
- xml2js — biblioteca clássica com API simples, converte XML em objetos JavaScript. Possui suporte integrado ao TypeScript através de @types/xml2js.
- xmldom — implementação do DOM Level 2 para Node.js, permite trabalhar com XML como uma árvore DOM (semelhante ao DOMParser do navegador).
Instalação e configuração
Para começar, instale uma das bibliotecas via npm:
npm install fast-xml-parser xml2js xmldom @types/xml2jsAgora, vamos ver exemplos práticos para cada biblioteca.
Exemplo 1: Parsing de XML com fast-xml-parser
O fast-xml-parser oferece alta performance e uma API conveniente para converter XML em objetos TypeScript comuns.
import { XMLParser, XMLBuilder, XMLValidator } from 'fast-xml-parser';
// XML de origemconst xmlData = `<?xml version="1.0" encoding="UTF-8"?><catalog> <book id="101"> <title>TypeScript Handbook</title> <author>Microsoft</author> <price currency="USD">29.99</price> </book> <book id="102"> <title>Node.js Design Patterns</title> <author>Mario Casciaro</author> <price currency="EUR">34.50</price> </book></catalog>`;
// Configurações do parserconst parser = new XMLParser({ ignoreAttributes: false, // Manter atributos attributeNamePrefix: '@_', // Prefixo para atributos textNodeName: '#text', // Nome para nós de texto isArray: (tagName) => ['book'].includes(tagName) // Sempre retornar array para <book>});
// Parsingconst result = parser.parse(xmlData);console.log(JSON.stringify(result, null, 2));
// Tipagem do resultadointerface Book { '@_id': string; title: string; author: string; price: { '@_currency': string; '#text': string; };}
interface Catalog { catalog: { book: Book[]; };}
const catalog = result as Catalog;console.log(`Primeiro livro: ${catalog.catalog.book[0].title}`);Observe o parâmetro isArray — ele garante que o elemento book seja sempre um array, mesmo que apenas um livro seja encontrado no XML.
Exemplo 2: Criação de XML com xml2js
A biblioteca xml2js é útil para construir XML a partir de objetos JavaScript. Ela usa o Builder para serialização.
import { Builder } from 'xml2js';
// Objeto para converter em XMLconst data = { root: { $: { version: '1.0', encoding: 'UTF-8' }, user: [ { $: { id: '1', active: 'true' }, name: 'Ivan Petrov', email: 'ivan@example.com', roles: { role: ['admin', 'editor'] } }, { $: { id: '2', active: 'false' }, name: 'Maria Sidorova', email: 'maria@example.com', roles: { role: ['viewer'] Também na biblioteca
Cliente OAuth para C# (.NET): implementação de autorização através de serviços terceiros
Validação de dados em JavaScript (Node.js): Joi, Yup, Zod
Framework CLI para JavaScript (Node.js): Commander.js – criação de aplicações de console
Vavr para Java: guia completo com exemplos práticos
Trabalhando com arquivos ZIP em Node.js: guia completo