Swift में XML के साथ काम करना (iOS/macOS): पूरी गाइड
XML (eXtensible Markup Language) डेटा एक्सचेंज, कॉन्फ़िगरेशन फ़ाइलों और वेब सर्विसेज के लिए एक लोकप्रिय फ़ॉर्मेट है। Apple इकोसिस्टम में Swift में XML के साथ काम करने के लिए Foundation का बिल्ट-इन XMLParser क्लास और तीसरे पक्ष की लाइब्रेरी जैसे SwiftXML उपलब्ध हैं। इस लेख में हम iOS और macOS के लिए कोड उदाहरणों के साथ दोनों तरीकों को विस्तार से समझेंगे।
1. Foundation का बिल्ट-इन XMLParser
XMLParser एक SAX पार्सर (सीक्वेंशियल, इवेंट-ड्रिवन) है। यह पूरे डॉक्यूमेंट को मेमोरी में लोड नहीं करता, बल्कि इसे पढ़ते समय पार्स करता है और डेलिगेट मेथड्स को कॉल करता है। यह बड़ी XML फ़ाइलों के लिए आदर्श है।
1.1. बेसिक सेटअप और डेलिगेट
एक क्लास बनाएं जो XMLParserDelegate प्रोटोकॉल को लागू करे। ज़रूरी मेथड्स:
parser(_:didStartElement:namespaceURI:qualifiedName:attributes:)— टैग खुलने पर कॉल होता है।parser(_:foundCharacters:)— एलिमेंट का टेक्स्ट कंटेंट प्राप्त करता है।parser(_:didEndElement:namespaceURI:qualifiedName:)— टैग बंद होने पर कॉल होता है।
import Foundation
class XMLHandler: NSObject, XMLParserDelegate {
var currentElement = ""
var currentText = ""
func parser(_ parser: XMLParser,
didStartElement elementName: String,
namespaceURI: String?,
qualifiedName qName: String?,
attributes attributeDict: [String : String] = [:]) {
currentElement = elementName
currentText = ""
if elementName == "book" {
print("किताब शुरू: \(attributeDict["id"] ?? "")")
}
}
func parser(_ parser: XMLParser, foundCharacters string: String) {
currentText += string
}
func parser(_ parser: XMLParser,
didEndElement elementName: String,
namespaceURI: String?,
qualifiedName qName: String?) {
if elementName == "title" {
print("शीर्षक: \(currentText.trimmingCharacters(in: .whitespacesAndNewlines))")
}
}
}
// उपयोग
if let url = Bundle.main.url(forResource: "books", withExtension: "xml"),
let parser = XMLParser(contentsOf: url) {
let handler = XMLHandler()
parser.delegate = handler
parser.parse()
}
1.2. एरर हैंडलिंग और नेमस्पेस
एरर लॉग करने के लिए parser(_:parseErrorOccurred:) मेथड लागू करें। नेमस्पेस के साथ काम करने के लिए namespaceURI और qualifiedName पैरामीटर्स का उपयोग करें।
func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) {
print("पार्सिंग एरर: \(parseError.localizedDescription)")
}
2. मैन्युअली XML डॉक्यूमेंट बनाना
Swift में XML जनरेट करने के लिए स्ट्रिंग्स या Foundation की XMLDocument लाइब्रेरी (केवल macOS पर उपलब्ध) का उपयोग कर सकते हैं। iOS पर XML मैन्युअली बनाना होगा।
2.1. स्ट्रिंग्स के ज़रिए XML जनरेट करना (iOS/macOS)
func createXMLString() -> String {
var xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
xml += "<library>\n"
xml += " <book id=\"1\">\n"
xml += " <title>Swift Programming</title>\n"
xml += " <author>Apple Inc.</author>\n"
xml += " </book>\n"
xml += "</library>\n"
return xml
}
let xmlString = createXMLString()
print(xmlString)
2.2. XMLDocument का उपयोग (केवल macOS)
import Foundation
let root = XMLElement(name: "library")
let book = XMLElement(name: "book")
book.addAttribute(XMLNode.attribute(withName: "id", stringValue: "1") as! XMLNode)
let title = XMLElement(name: "title", stringValue: "Swift Programming")
let author = XMLElement(name: "author", stringValue: "Apple Inc.")
book.addChild(title)
book.ad