Travailler avec XML en TypeScript : bibliothèques et exemples pratiques
XML (eXtensible Markup Language) reste un format très demandé pour l'échange de données, les fichiers de configuration et l'intégration avec des systèmes hérités. Malgré la popularité de JSON, de nombreuses solutions d'entreprise, services SOAP et formats de données (par exemple, SVG, RSS, XSLT) utilisent encore XML. En TypeScript, grâce au typage statique, le travail avec XML devient plus fiable et prévisible. Dans cet article, nous examinerons les meilleures bibliothèques pour l'analyse, la création et la validation de documents XML en TypeScript.
Bibliothèques principales pour travailler avec XML en TypeScript
Aujourd'hui, il existe plusieurs bibliothèques matures qui fonctionnent parfaitement avec TypeScript. Examinons les trois plus populaires :
- fast-xml-parser — la bibliothèque la plus rapide pour analyser XML en JavaScript/TypeScript. Prend en charge la validation, la conversion en JSON et vice versa.
- xml2js — une bibliothèque classique avec une API simple, convertit XML en objets JavaScript. Dispose d'une prise en charge intégrée de TypeScript via @types/xml2js.
- xmldom — une implémentation de DOM Level 2 pour Node.js, permet de travailler avec XML comme un arbre DOM (similaire au DOMParser du navigateur).
Installation et configuration
Pour commencer, installez l'une des bibliothèques via npm :
npm install fast-xml-parser xml2js xmldom @types/xml2jsExaminons maintenant des exemples pratiques pour chaque bibliothèque.
Exemple 1 : Analyse XML avec fast-xml-parser
fast-xml-parser offre des performances élevées et une API pratique pour convertir XML en objets TypeScript ordinaires.
import { XMLParser, XMLBuilder, XMLValidator } from 'fast-xml-parser';
// XML sourceconst 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>`;
// Paramètres de l'analyseurconst parser = new XMLParser({ ignoreAttributes: false, // Conserver les attributs attributeNamePrefix: '@_', // Préfixe pour les attributs textNodeName: '#text', // Nom pour les nœuds de texte isArray: (tagName) => ['book'].includes(tagName) // Toujours retourner un tableau pour <book>});
// Analyseconst result = parser.parse(xmlData);console.log(JSON.stringify(result, null, 2));
// Typage du résultatinterface Book { '@_id': string; title: string; author: string; price: { '@_currency': string; '#text': string; };}
interface Catalog { catalog: { book: Book[]; };}
const catalog = result as Catalog;console.log(`Premier livre : ${catalog.catalog.book[0].title}`);Notez le paramètre isArray — il garantit que l'élément book sera toujours un tableau, même si un seul livre est rencontré dans le XML.
Exemple 2 : Création XML avec xml2js
La bibliothèque xml2js est pratique pour construire du XML à partir d'objets JavaScript. Elle utilise Builder pour la sérialisation.
import { Builder } from 'xml2js';
// Objet à convertir en 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'] Aussi dans la bibliothèque
Métriques Prometheus en Rust : bibliothèques prometheus et metrics-exporter-prometheus
GraphQL en Swift : Guide complet de la bibliothèque Apollo iOS
Injection de dépendances (Dependency Injection) en C++ : conteneurs et pratique