Kotlin में XML के साथ काम करना: लाइब्रेरीज़ और प्रैक्टिकल उदाहरण
JSON और YAML के बढ़ते उपयोग के बावजूद, XML अभी भी कॉर्पोरेट सिस्टम, कॉन्फ़िगरेशन फ़ाइलों, SOAP प्रोटोकॉल और Android डेवलपमेंट में एक महत्वपूर्ण फ़ॉर्मेट है। Kotlin, Java के साथ अपनी संगतता के कारण, XML के लिए सभी परिपक्व Java लाइब्रेरीज़ तक पहुँच प्रदान करता है, साथ ही इसके अपने नेटिव समाधान भी हैं। इस लेख में, हम Kotlin में XML प्रोसेसिंग के पाँच मुख्य दृष्टिकोणों को कवर करेंगे, जिसमें पार्सिंग, निर्माण और डॉक्यूमेंट वैलिडेशन शामिल हैं।
1. बिल्ट-इन टूल्स: DOM, SAX, StAX
Kotlin सीधे मानक Java API का उपयोग करता है। यह त्वरित कार्यों के लिए सबसे आसान तरीका है, लेकिन इसमें बहुत अधिक बॉयलरप्लेट कोड की आवश्यकता होती है।
DOM (Document Object Model)
पूरे XML को मेमोरी में लोड करता है और नोड्स तक मनमानी पहुँच प्रदान करता है। छोटे डॉक्यूमेंट के लिए उपयुक्त।
import javax.xml.parsers.DocumentBuilderFactory
import org.w3c.dom.Element
fun parseWithDOM(xml: String) {
val factory = DocumentBuilderFactory.newInstance()
val builder = factory.newDocumentBuilder()
val doc = builder.parse(xml.byteInputStream())
val books = doc.getElementsByTagName("book")
for (i in 0 until books.length) {
val book = books.item(i) as Element
val title = book.getElementsByTagName("title").item(0).textContent
println("पुस्तक: $title")
}
}
SAX (Simple API for XML)
स्ट्रीम-आधारित पार्सर, पूरे डॉक्यूमेंट को मेमोरी में लोड नहीं करता। बड़ी फ़ाइलों के लिए कुशल, लेकिन इम्प्लीमेंटेशन जटिल है।
import org.xml.sax.helpers.DefaultHandler
import org.xml.sax.Attributes
import javax.xml.parsers.SAXParserFactory
class BookHandler : DefaultHandler() {
override fun startElement(uri: String, localName: String, qName: String, attributes: Attributes) {
if (qName == "book") {
println("पुस्तक मिली जिसका id: ${attributes.getValue("id")}")
}
}
}
fun parseWithSAX(xml: String) {
val factory = SAXParserFactory.newInstance()
val parser = factory.newSAXParser()
parser.parse(xml.byteInputStream(), BookHandler())
}
2. JDOM — Kotlin के लिए सुविधाजनक API
JDOM एक लोकप्रिय Java लाइब्रेरी है जो कलेक्शन और extension-फंक्शन के समर्थन के कारण Kotlin के साथ शानदार रूप से एकीकृत होती है। यह बिना जटिल फैक्ट्री के XML को पढ़ने, संशोधित करने और बनाने की अनुमति देता है।
पार्सिंग और नेविगेशन
import org.jdom2.input.SAXBuilder
import org.jdom2.Element
fun parseWithJDOM(xml: String) {
val builder = SAXBuilder()
val doc = builder.build(xml.byteInputStream())
val root = doc.rootElement
root.getChildren("book").forEach { book ->
val title = book.getChildText("title")
val author = book.getChildText("author")
println("$title — $author")
}
}
शुरू से XML बनाना
import org.jdom2.Document
import org.jdom2.Element
import org.jdom2.output.XMLOutputter
fun createXML(): String {
val root = Element("library")
val book = Element("book").apply {
setAttribute("id", "1")
addContent(Element("title").setText("Kotlin in Action"))
addContent(Element("author").setText("Dmitry Jemerov"))
}
root.addContent(book)
val doc = Document(root)
val outputter = XMLOutputter().apply {
format = org.jdom2.output.Format.getPrettyFormat()
}
return outputter.outputString(doc)
}
3. XOM — सरलता और सख्ती
XOM "immutable by default" सिद्धांत का पालन करता है — बनाने के बाद सभी नोड्स को बदला नहीं जा सकता, केवल बदला जा सकता है। यह कोड को पूर्वानुमानित और सुरक्षित बनाता है। लाइब्रेरी स्वचालित रूप से संरचना की शुद्धता की जाँच करती है।
import nu.xom.Builder
import nu.xom.Serializer
fun parseWithXOM(xml: String) {
val builder = Builder()
val doc = builder.build(xml, null)
val root = doc.rootElement
val books = root.getChildElements("book")
for (i in 0 until books.size) {
v