Travailler avec XML en TypeScript : aperçu des bibliothèques et exemples pratiques
\n\nXML (eXtensible Markup Language) reste un format très utilisé pour l'échange de données dans les systèmes d'entreprise, les fichiers de configuration et les services web (SOAP, RSS/Atom). En TypeScript, grâce au typage statique, le travail avec XML devient plus sûr et plus prévisible. Dans cet article, nous examinerons trois bibliothèques principales pour travailler avec XML en TypeScript : fast-xml-parser, xml2js et xmlbuilder2. Vous apprendrez à analyser du XML, à créer des documents XML et à valider leur structure.
1. Installation et configuration
\n\nPour commencer, installez une ou plusieurs bibliothèques via npm :
\n\nnpm install fast-xml-parser xml2js xmlbuilder2\nnpm install -D @types/xml2js // types pour xml2js (pour fast-xml-parser les types sont intégrés)\n\n\n2. Analyse XML avec fast-xml-parser
\n\nfast-xml-parser est la bibliothèque la plus rapide pour analyser du XML en JavaScript/TypeScript. Elle prend en charge les attributs, les espaces de noms et peut convertir du XML en JSON.
Analyse de base
\n\nimport { XMLParser } from 'fast-xml-parser';\n\nconst xmlString = `<bookstore>\n <book category="fiction">\n <title>Guerre et Paix</title>\n <author>Léon Tolstoï</author>\n <price currency="RUB">1200</price>\n </book>\n</bookstore>`;\n\nconst parser = new XMLParser({\n ignoreAttributes: false, // conserver les attributs\n attributeNamePrefix: '@_', // préfixe pour les attributs\n});\n\nconst result = parser.parse(xmlString);\nconsole.log(result);\n\n\nLe résultat sera un objet :
\n\n{\n bookstore: {\n book: {\n '@_category': 'fiction',\n title: 'Guerre et Paix',\n author: 'Léon Tolstoï',\n price: {\n '@_currency': 'RUB',\n '#text': '1200'\n }\n }\n }\n}\n\n\nAnalyse avec typage
\n\ninterface Book {\n '@_category': string;\n title: string;\n author: string;\n price: {\n '@_currency': string;\n '#text': number;\n };\n}\n\ninterface Bookstore {\n bookstore: {\n book: Book | Book[];\n };\n}\n\nconst typedResult = parser.parse(xmlString) as Bookstore;\nconsole.log(typedResult.bookstore.book);\n\n\n3. Analyse XML avec xml2js
\n\nxml2js est une bibliothèque avec des fonctionnalités plus avancées, incluant la prise en charge des fonctions de traitement et des transformations personnalisées. Elle fonctionne de manière asynchrone.
Analyse asynchrone
\n\nimport { parseStringPromise } from 'xml2js';\n\ninterface XmlBook {\n $: { category: string };\n title: string[];\n author: string[];\n price: Array<{ $: { currency: string }, _: string }>;\n}\n\nasync function parseXmlData(xml: string): Promise<void> {\n try {\n const result = await parseStringPromise(xml, {\n explicitArray: false, // ne pas encapsuler les éléments uniques dans des tableaux\n attrkey: '$', // clé pour les attributs\n charkey: '_' // clé pour le contenu textuel\n });\n \n const book = result.bookstore.book as XmlBook;\n console.log(`Livre : ${book.title}, auteur : ${book.author}`);\n console.log(`Prix : ${book.price._} ${book.price.$.currency}`);\n } catch (error) {\n console.error('Erreur d\'analyse XML :', error);\n }\n}\n\nparseXmlData(xmlString);\n\n\n4. Création de XML avec xmlbuilder2
\n\nxmlbuilder2 est une bibliothèque moderne pour créer des documents XML avec prise en charge de TypeScript. Elle fournit une API chaînable et un échappement automatique.
Création d'un XML simple
\n\nimport { create } from 'xmlbuilder2';\n\nconst xml = create({ version: '1.0', encoding: 'UTF-8' })\n .ele('catalog')\n .ele('book', { id: '1', category: 'fiction' })\n .ele('title').txt('Crime et Châtiment').up()\n .ele('author').tx