Kotlin में XML के साथ कार्य: लाइब्रेरीज़ का अवलोकन और व्यावहारिक उदाहरण
\n\nXML (eXtensible Markup Language) संरचित डेटा को संग्रहीत और स्थानांतरित करने के लिए प्रमुख प्रारूपों में से एक बना हुआ है। Kotlin भाषा में, जो JVM के ऊपर काम करती है, XML के साथ कार्य करने के लिए सभी Java लाइब्रेरीज़ उपलब्ध हैं, साथ ही कई मूल Kotlin समाधान भी। इस लेख में हम XML के साथ कार्य करने के तीन मुख्य दृष्टिकोणों पर विचार करेंगे: SimpleXML (एनोटेशन-आधारित पार्सिंग), XStream (तेज़ सीरियलाइज़ेशन) और kotlinx.serialization (मूल Kotlin लाइब्रेरी)।
\n\n1. SimpleXML — एनोटेशन-आधारित XML पार्सिंग
\n\nSimpleXML Java/Kotlin के लिए एक लोकप्रिय लाइब्रेरी है, जो एनोटेशन की मदद से XML को ऑब्जेक्ट में और वापस रूपांतरित करने की अनुमति देती है। यह तब आदर्श है जब XML की संरचना पहले से ज्ञात हो।
\n\nकनेक्शन (Gradle):
\ndependencies {\n implementation("org.simpleframework:simple-xml:2.7.1")\n}\n\n\nउदाहरण: RSS फ़ीड का पार्सिंग
\nमान लीजिए, हमारे पास समाचारों वाला XML है:
\n<rss version="2.0">\n <channel>\n <item>\n <title>समाचार 1</title>\n <link>https://example.com/1</link>\n </item>\n <item>\n <title>समाचार 2</title>\n <link>https://example.com/2</link>\n </item>\n </channel>\n</rss>\n\n\nएनोटेशन के साथ डेटा मॉडल बनाएँ:
\nimport org.simpleframework.xml.*\n\n@Root(name = "rss", strict = false)\ndata class Rss(\n @field:Element(name = "channel")\n var channel: Channel? = null\n)\n\n@Root(name = "channel", strict = false)\ndata class Channel(\n @field:ElementList(inline = true, entry = "item")\n var items: List<Item> = emptyList()\n)\n\n@Root(name = "item", strict = false)\ndata class Item(\n @field:Element(name = "title")\n var title: String = "",\n\n @field:Element(name = "link")\n var link: String = ""\n)\n\n\nXML पार्सिंग:
\nimport org.simpleframework.xml.core.Persister\n\nfun parseRss(xmlString: String): Rss? {\n return try {\n val serializer = Persister()\n serializer.read(Rss::class.java, xmlString)\n } catch (e: Exception) {\n println("पार्सिंग त्रुटि: ${e.message}")\n null\n }\n}\n\n// उपयोग:\nval xml = "<rss version=\\"2.0\\">...</rss>" // आपका XML\nval rss = parseRss(xml)\nrss?.channel?.items?.forEach { item ->\n println("${item.title}: ${item.link}")\n}\n\n\nSimpleXML के लाभ: सरलता, इनहेरिटेंस समर्थन, तिथियों और संख्याओं के लिए अंतर्निहित कनवर्टर।
\n\n2. XStream — तेज़ ऑब्जेक्ट सीरियलाइज़ेशन
\n\nXStream एक और शक्तिशाली लाइब्रेरी है, जो बिना एनोटेशन के ऑब्जेक्ट को XML में सीरियलाइज़ कर सकती है। यह रिफ्लेक्शन का उपयोग करती है और प्रोटोटाइपिंग के लिए उपयुक्त है।
\n\nकनेक्शन:
\ndependencies {\n implementation("com.thoughtworks.xstream:xstream:1.4.20")\n}\n\n\nउदाहरण: सीरियलाइज़ेशन और डीसीरियलाइज़ेशन
\nimport com.thoughtworks.xstream.XStream\n\ndata class Person(val name: String, val age: Int)\n\nfun main() {\n val xstream = XStream()\n xstream.alias("person", Person::class.java)\n\n // सीरियलाइज़ेशन\n val person = Person("इवान", 30)\n val xml = xstream.toXML(person)\n println(xml)\n // आउटपुट: <person><name>इवान</name><age>30</age></person>\n\n // डीसीरियलाइज़ेशन\n val restored = xstream.fromXML(xml) as Person\n println("नाम: ${restored.name}, आयु: ${restored.age}")\n}\n\n\nXStream की विशेषताएँ:
\n- \n
- एनोटेशन की आवश्यकता नहीं — "बॉक्स से बाहर" काम करता है \n
- कलेक्शन, ऐरे, नेस्टेड ऑब्जेक्ट का समर्थन करता है \n
- क्लास और फ़ील्ड के लिए उपनाम कॉन्फ़िगर किए जा सकते हैं \n
- ख