Trabalhando com XML em TypeScript: da análise à geração
XML (eXtensible Markup Language) continua sendo um dos principais formatos para troca de dados, arquivos de configuração e fluxo de documentos. No ecossistema TypeScript, existem várias bibliotecas poderosas que permitem trabalhar eficientemente com XML, mantendo a tipagem estrita e as vantagens da análise estática. Neste artigo, exploraremos as principais ferramentas, suas capacidades e forneceremos exemplos práticos de uso.
Por que usar TypeScript para trabalhar com XML?
TypeScript adiciona um sistema de tipos ao JavaScript, o que é especialmente útil ao trabalhar com documentos XML de estrutura complexa. Você pode descrever esquemas de dados por meio de interfaces, evitar erros ao acessar elementos aninhados e obter autocompletar automaticamente na IDE. Além disso, as bibliotecas modernas para trabalhar com XML possuem declarações de tipos (tipagem), tornando seu uso o mais seguro possível.
Principais bibliotecas para trabalhar com XML em TypeScript
- fast-xml-parser — a biblioteca mais rápida e funcional. Suporta análise em objeto/array, validação, trabalho com atributos, CDATA e namespaces.
- xml2js — analisador clássico que converte XML em objetos JavaScript. Possui suporte para análise assíncrona e opções personalizadas.
- xmldom — implementação do analisador DOM para Node.js e navegador. Permite manipular a árvore XML como no DOM do navegador.
- xmlbuilder2 — biblioteca moderna para criar documentos XML com API encadeada e suporte completo a tipos.
Instalação das bibliotecas
Para começar, instale uma das bibliotecas via npm. Todas possuem declarações de tipos integradas:
npm install fast-xml-parsernpm install xml2jsnpm install @xmldom/xmldomnpm install xmlbuilder2Exemplo 1: Análise de XML com fast-xml-parser
Vamos ver um exemplo básico de conversão de uma string XML em um objeto tipado:
import { XMLParser } from 'fast-xml-parser';
interface Book { title: string; author: string; year: number; price?: number;}
interface Catalog { catalog: { book: Book | Book[]; };}
const xmlData = ` <catalog> <book> <title>TypeScript Handbook</title> <author>Microsoft</author> <year>2023</year> </book> <book> <title>XML for Developers</title> <author>John Doe</author> <year>2022</year> <price>29.99</price> </book> </catalog>`;
const parser = new XMLParser({ ignoreAttributes: false, attributeNamePrefix: '@_', isArray: (name) => name === 'book',});
const result: Catalog = parser.parse(xmlData);console.log(result.catalog.book[0].title); // "TypeScript Handbook"Observe a opção isArray — ela garante que o elemento book seja sempre um array, mesmo que haja apenas um livro no XML. Isso simplifica o processamento posterior.
Exemplo 2: Criação de XML com xmlbuilder2
A biblioteca xmlbuilder2 fornece uma interface encadeada conveniente para gerar XML:
import { create } from 'xmlbuilder2';
interface User { id: number; name: string; email: string;}
const user: User = { id: 42, name: 'Alice', email: 'alice@example.com'};
const doc = create({ version: '1.0', encoding: 'UTF-8' }) .ele('users') .ele('user', { id: user.id.toString() }) .ele('name').txt(user.name).up() .ele('email').txt(user.email).up() .up() .up();
const xmlString: string = doc.end({ prettyPrint: true });console.log(xmlString);/*<?xml version="1.0" encoding="UTF-8"?><users> <user id="42"> <name>Alice</name> Também na biblioteca
Trabalhando com Excel em TypeScript: bibliotecas, exemplos e ferramentas
Trabalho com datas em C++: visão geral das bibliotecas para manipulação de tempo