Trabalhando com XML em TypeScript: bibliotecas, parsing e criação de documentos XML

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

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/xml2js


Agora, 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']

Recommendations