Processamento e análise de XML em TypeScript: bibliotecas e exemplos práticos

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: 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 xmlbuilder2


Exemplo 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>

Recommendations