العمل مع XML في Kotlin: المكتبات، التحليل وإنشاء المستندات

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

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

ابدأ الدورة

العمل مع XML في Kotlin: المكتبات، التحليل وإنشاء المستندات



لا يزال XML (لغة الترميز الموسعة) تنسيقًا مطلوبًا لتخزين ونقل البيانات المنظمة، خاصة في الأنظمة القديمة وملفات التكوين وخدمات الويب. Kotlin، كونه متوافقًا تمامًا مع Java، يوفر الوصول إلى جميع مكتبات Java الكلاسيكية للعمل مع XML، بالإضافة إلى وجود حلول أصلية. في هذه المقالة، سنستعرض الأساليب الرئيسية: تحليل وإنشاء وتسلسل مستندات XML في Kotlin.



1. أدوات JDK المضمنة: DOM, SAX, StAX

بفضل قابلية التشغيل البيني الكاملة مع Java، يمكن استخدام واجهات برمجة التطبيقات القياسية مباشرة في Kotlin:

  • DOM (نموذج كائن المستند) — يقوم بتحميل المستند بأكمله في الذاكرة، وهو مناسب للتعديلات.
  • SAX (واجهة برمجة تطبيقات بسيطة لـ XML) — محلل يعتمد على الأحداث، استهلاك ضئيل للذاكرة.
  • StAX (واجهة برمجة تطبيقات التدفق لـ XML) — محلل تدفق مع نهج المؤشر أو الأحداث.


مثال على تحليل XML باستخدام DOM في Kotlin:

import javax.xml.parsers.DocumentBuilderFactoryimport org.w3c.dom.Element

fun parseXmlWithDom(xmlString: String) { val factory = DocumentBuilderFactory.newInstance() val builder = factory.newDocumentBuilder() val document = builder.parse(xmlString.byteInputStream()) val root = document.documentElement

val items = root.getElementsByTagName("item") for (i in 0 until items.length) { val item = items.item(i) as Element val name = item.getElementsByTagName("name").item(0).textContent val price = item.getElementsByTagName("price").item(0).textContent println("Item: $name, Price: $price") }}


2. مكتبة Simple XML (org.simpleframework.xml)

Simple XML — مكتبة شائعة لتسلسل/إلغاء تسلسل الكائنات إلى XML. تستخدم التعليقات التوضيحية ولا تتطلب ملفات تكوين. مناسبة تمامًا لواجهات برمجة تطبيقات REST مع استجابات XML.



الإضافة (Gradle):

implementation("org.simpleframework:simple-xml:2.7.1")


مثال على النموذج وإلغاء التسلسل:

import org.simpleframework.xml.*import org.simpleframework.xml.core.Persister

@Root(name = "catalog")data class Catalog( @field:ElementList(inline = true) var books: List<Book> = emptyList())

@Root(name = "book")data class Book( @field:Element(name = "title") var title: String = "", @field:Element(name = "author") var author: String = "", @field:Attribute(name = "id") var id: Int = 0)

fun deserializeXml(xml: String): Catalog { val serializer = Persister() return serializer.read(Catalog::class.java, xml)}


3. kotlinx.serialization مع تنسيق XML

للمشاريع متعددة المنصات (KMP)، من المناسب استخدام kotlinx.serialization مع تنسيق XML مخصص. توجد محولات طرف ثالث، مثل kotlinx-serialization-xml (من المجتمع).



مثال مع مكتبة nl.adaptivity.xmlutil (تدعم JVM, JS, Native):

import nl.adaptivity.xmlutil.serialization.XMLimport kotlinx.serialization.*

@Serializabledata class Person( val name: String, @XmlSerialName("age") val years: Int)

fun main() { val xml = XML { indent = 4 xmlDeclMode = XmlDeclMode.Auto } val person = Person("Alice", 30) val result = xml.encodeToString(Person.serializer(), person) println(result) // <Person> // <name>Alice</name> // <age>30</age> // </Person>}


4. XPath و XSLT في Kotlin

لاستخراج البيانات بناءً على معايير معقدة، استخدم XPath. في Kotlin، يتم ذلك من خلال فئات Java القياسية javax.xml.xpath

توصيات