Trabalhando com XML em TypeScript: visão geral das bibliotecas e exemplos práticos
XML (eXtensible Markup Language) continua sendo um formato popular para troca de dados em sistemas corporativos, arquivos de configuração e serviços web (SOAP, RSS/Atom). Em TypeScript, graças à tipagem estática, trabalhar com XML se torna mais seguro e previsível. Neste artigo, veremos três bibliotecas principais para trabalhar com XML em TypeScript: fast-xml-parser, xml2js e xmlbuilder2. Você aprenderá como fazer parsing de XML, criar documentos XML e validar sua estrutura.
1. Instalação e configuração
Para começar, instale uma ou mais bibliotecas via npm:
npm install fast-xml-parser xml2js xmlbuilder2npm install -D @types/xml2js // tipos para xml2js (para fast-xml-parser os tipos são embutidos)2. Parsing de XML com fast-xml-parser
fast-xml-parser é a biblioteca mais rápida para parsing de XML em JavaScript/TypeScript. Ela suporta trabalho com atributos, namespaces e pode converter XML para JSON.
Parsing básico
import { XMLParser } from 'fast-xml-parser';
const xmlString = `<bookstore> <book category="fiction"> <title>Guerra e Paz</title> <author>Liev Tolstói</author> <price currency="RUB">1200</price> </book></bookstore>`;
const parser = new XMLParser({ ignoreAttributes: false, // preservar atributos attributeNamePrefix: '@_', // prefixo para atributos});
const result = parser.parse(xmlString);console.log(result);O resultado será um objeto:
{ bookstore: { book: { '@_category': 'fiction', title: 'Guerra e Paz', author: 'Liev Tolstói', price: { '@_currency': 'RUB', '#text': '1200' } } }}Parsing com tipagem
interface Book { '@_category': string; title: string; author: string; price: { '@_currency': string; '#text': number; };}
interface Bookstore { bookstore: { book: Book | Book[]; };}
const typedResult = parser.parse(xmlString) as Bookstore;console.log(typedResult.bookstore.book);3. Parsing de XML com xml2js
xml2js é uma biblioteca com recursos mais avançados, incluindo suporte a funções de processamento e transformações personalizadas. Ela funciona de forma assíncrona.
Parsing assíncrono
import { parseStringPromise } from 'xml2js';
interface XmlBook { $: { category: string }; title: string[]; author: string[]; price: Array<{ $: { currency: string }, _: string }>;}
async function parseXmlData(xml: string): Promise<void> { try { const result = await parseStringPromise(xml, { explicitArray: false, // não agrupar elementos únicos em arrays attrkey: '$', // chave para atributos charkey: '_' // chave para conteúdo textual }); const book = result.bookstore.book as XmlBook; console.log(`Livro: ${book.title}, autor: ${book.author}`); console.log(`Preço: ${book.price._} ${book.price.$.currency}`); } catch (error) { console.error('Erro ao fazer parsing do XML:', error); }}
parseXmlData(xmlString);4. Criação de XML com xmlbuilder2
xmlbuilder2 é uma biblioteca moderna para criação de documentos XML com suporte a TypeScript. Ela fornece uma API encadeada e escape automático.
Criação de XML simples
import { create } from 'xmlbuilder2';
const xml = create({ version: '1.0', encoding: 'UTF-8' }) .ele('catalog') .ele('book', { id: '1', category: 'fiction' }) .ele('title').txt('Crime e Castigo').up() .ele('author').tx Também na biblioteca
Geração de relatórios PDF em PHP: visão geral das bibliotecas e exemplos de código
Métricas Prometheus em Swift: integração para aplicativos iOS/macOS
nodemailer
Cache em Java: Redis, Ehcache, Caffeine, Hazelcast — visão geral e exemplos