Travailler avec XML en TypeScript : bibliothèques pour l'analyse et la création de XML

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec XML en TypeScript : aperçu des bibliothèques et exemples pratiques

\n\n

XML (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.

\n\n

1. Installation et configuration

\n\n

Pour commencer, installez une ou plusieurs bibliothèques via npm :

\n\n
npm 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\n

2. Analyse XML avec fast-xml-parser

\n\n

fast-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.

\n\n

Analyse de base

\n\n
import { 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\n

Le 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\n

Analyse avec typage

\n\n
interface 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\n

3. Analyse XML avec xml2js

\n\n

xml2js 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.

\n\n

Analyse asynchrone

\n\n
import { 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\n

4. Création de XML avec xmlbuilder2

\n\n

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

\n\n

Création d'un XML simple

\n\n
import { 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                    

Recommendations