Arbeit mit XML in TypeScript: Überblick über Bibliotheken und praktische Beispiele
\n\nXML (eXtensible Markup Language) bleibt ein gefragtes Format für den Datenaustausch in Unternehmenssystemen, Konfigurationsdateien und Webdiensten (SOAP, RSS/Atom). In TypeScript wird die Arbeit mit XML dank statischer Typisierung sicherer und vorhersagbarer. In diesem Artikel betrachten wir drei Hauptbibliotheken für die Arbeit mit XML in TypeScript: fast-xml-parser, xml2js und xmlbuilder2. Sie erfahren, wie Sie XML parsen, XML-Dokumente erstellen und deren Struktur validieren.
1. Installation und Einrichtung
\n\nInstallieren Sie zunächst eine oder mehrere Bibliotheken über npm:
\n\nnpm install fast-xml-parser xml2js xmlbuilder2\nnpm install -D @types/xml2js // Typen für xml2js (für fast-xml-parser sind Typen integriert)\n\n\n2. XML-Parsing mit fast-xml-parser
\n\nfast-xml-parser ist die schnellste Bibliothek zum Parsen von XML in JavaScript/TypeScript. Sie unterstützt die Arbeit mit Attributen, Namespaces und kann XML in JSON umwandeln.
Basis-Parsing
\n\nimport { XMLParser } from 'fast-xml-parser';\n\nconst xmlString = `<bookstore>\n <book category="fiction">\n <title>Krieg und Frieden</title>\n <author>Lew Tolstoi</author>\n <price currency="RUB">1200</price>\n </book>\n</bookstore>`;\n\nconst parser = new XMLParser({\n ignoreAttributes: false, // Attribute beibehalten\n attributeNamePrefix: '@_', // Präfix für Attribute\n});\n\nconst result = parser.parse(xmlString);\nconsole.log(result);\n\n\nDas Ergebnis ist ein Objekt:
\n\n{\n bookstore: {\n book: {\n '@_category': 'fiction',\n title: 'Krieg und Frieden',\n author: 'Lew Tolstoi',\n price: {\n '@_currency': 'RUB',\n '#text': '1200'\n }\n }\n }\n}\n\n\nParsing mit Typisierung
\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. XML-Parsing mit xml2js
\n\nxml2js ist eine Bibliothek mit erweiterten Funktionen, einschließlich Unterstützung für process-Funktionen und benutzerdefinierte Transformationen. Sie arbeitet asynchron.
Asynchrones Parsing
\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, // einzelne Elemente nicht in Arrays verpacken\n attrkey: '$', // Schlüssel für Attribute\n charkey: '_' // Schlüssel für Textinhalt\n });\n \n const book = result.bookstore.book as XmlBook;\n console.log(`Buch: ${book.title}, Autor: ${book.author}`);\n console.log(`Preis: ${book.price._} ${book.price.$.currency}`);\n } catch (error) {\n console.error('Fehler beim XML-Parsing:', error);\n }\n}\n\nparseXmlData(xmlString);\n\n\n4. XML-Erstellung mit xmlbuilder2
\n\nxmlbuilder2 ist eine moderne Bibliothek zum Erstellen von XML-Dokumenten mit TypeScript-Unterstützung. Sie bietet eine verkettbare API und automatische Maskierung.
Erstellung eines einfachen XML
\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('Schuld und Sühne').up()\n .ele('author').tx