العمل مع XML في TypeScript: مكتبات لتحليل وإنشاء XML

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع XML في TypeScript: نظرة عامة على المكتبات وأمثلة عملية

\n\n

XML (eXtensible Markup Language) لا يزال تنسيقًا مطلوبًا لتبادل البيانات في الأنظمة المؤسسية وملفات التكوين وخدمات الويب (SOAP و RSS/Atom). في TypeScript، بفضل الكتابة الثابتة، يصبح العمل مع XML أكثر أمانًا وقابلية للتنبؤ. في هذه المقالة، سنستعرض ثلاث مكتبات رئيسية للعمل مع XML في TypeScript: fast-xml-parser و xml2js و xmlbuilder2. ستتعلم كيفية تحليل XML وإنشاء مستندات XML والتحقق من صحتها.

\n\n

1. التثبيت والإعداد

\n\n

للبدء، قم بتثبيت مكتبة واحدة أو أكثر عبر npm:

\n\n
npm install fast-xml-parser xml2js xmlbuilder2\nnpm install -D @types/xml2js  // أنواع لـ xml2js (لـ fast-xml-parser الأنواع مدمجة)\n
\n\n

2. تحليل XML باستخدام fast-xml-parser

\n\n

fast-xml-parser هي أسرع مكتبة لتحليل XML في JavaScript/TypeScript. تدعم العمل مع السمات ومساحات الأسماء ويمكنها تحويل XML إلى JSON.

\n\n

التحليل الأساسي

\n\n
import { 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\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. تحليل XML باستخدام xml2js

\n\n

xml2js هي مكتبة ذات إمكانيات أكثر تقدمًا، بما في ذلك دعم دوال المعالجة والتحويلات المخصصة. تعمل بشكل غير متزامن.

\n\n

التحليل غير المتزامن

\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,  // عدم تغليف العناصر المفردة في مصفوفات\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\n

4. إنشاء XML باستخدام xmlbuilder2

\n\n

xmlbuilder2 هي مكتبة حديثة لإنشاء مستندات XML مع دعم TypeScript. توفر واجهة برمجة تطبيقات متسلسلة وهروب تلقائي.

\n\n

إنشاء XML بسيط

\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('الجريمة والعقاب').up()\n      .ele('author').tx                    

توصيات