العمل مع XML في TypeScript: نظرة عامة على المكتبات وأمثلة عملية
\n\nXML (eXtensible Markup Language) لا يزال تنسيقًا مطلوبًا لتبادل البيانات في الأنظمة المؤسسية وملفات التكوين وخدمات الويب (SOAP و RSS/Atom). في TypeScript، بفضل الكتابة الثابتة، يصبح العمل مع XML أكثر أمانًا وقابلية للتنبؤ. في هذه المقالة، سنستعرض ثلاث مكتبات رئيسية للعمل مع XML في TypeScript: fast-xml-parser و xml2js و xmlbuilder2. ستتعلم كيفية تحليل XML وإنشاء مستندات XML والتحقق من صحتها.
1. التثبيت والإعداد
\n\nللبدء، قم بتثبيت مكتبة واحدة أو أكثر عبر npm:
\n\nnpm install fast-xml-parser xml2js xmlbuilder2\nnpm install -D @types/xml2js // أنواع لـ xml2js (لـ fast-xml-parser الأنواع مدمجة)\n\n\n2. تحليل XML باستخدام fast-xml-parser
\n\nfast-xml-parser هي أسرع مكتبة لتحليل XML في JavaScript/TypeScript. تدعم العمل مع السمات ومساحات الأسماء ويمكنها تحويل XML إلى JSON.
التحليل الأساسي
\n\nimport { XMLParser } from 'fast-xml-parser';\n\nconst xmlString = `<bookstore>\n <book category="fiction">\n <title>الحرب والسلام</title>\n <author>ليو تولستوي</author>\n <price currency="RUB">1200</price>\n </book>\n</bookstore>`;\n\nconst parser = new XMLParser({\n ignoreAttributes: false, // الاحتفاظ بالسمات\n attributeNamePrefix: '@_', // بادئة للسمات\n});\n\nconst result = parser.parse(xmlString);\nconsole.log(result);\n\n\nستكون النتيجة كائنًا:
\n\n{\n bookstore: {\n book: {\n '@_category': 'fiction',\n title: 'الحرب والسلام',\n author: 'ليو تولستوي',\n price: {\n '@_currency': 'RUB',\n '#text': '1200'\n }\n }\n }\n}\n\n\nالتحليل مع الكتابة
\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 باستخدام xml2js
\n\nxml2js هي مكتبة ذات إمكانيات أكثر تقدمًا، بما في ذلك دعم دوال المعالجة والتحويلات المخصصة. تعمل بشكل غير متزامن.
التحليل غير المتزامن
\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, // عدم تغليف العناصر المفردة في مصفوفات\n attrkey: '$', // مفتاح للسمات\n charkey: '_' // مفتاح للمحتوى النصي\n });\n \n const book = result.bookstore.book as XmlBook;\n console.log(`الكتاب: ${book.title}, المؤلف: ${book.author}`);\n console.log(`السعر: ${book.price._} ${book.price.$.currency}`);\n } catch (error) {\n console.error('خطأ في تحليل XML:', error);\n }\n}\n\nparseXmlData(xmlString);\n\n\n4. إنشاء XML باستخدام xmlbuilder2
\n\nxmlbuilder2 هي مكتبة حديثة لإنشاء مستندات XML مع دعم TypeScript. توفر واجهة برمجة تطبيقات متسلسلة وهروب تلقائي.
إنشاء 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('الجريمة والعقاب').up()\n .ele('author').tx