العمل مع XML في Swift (iOS/macOS): Foundation و SwiftXML

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

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

ابدأ الدورة

العمل مع XML في Swift (iOS/macOS): دليل شامل



XML (لغة الترميز القابلة للتوسيع) لا يزال تنسيقًا مطلوبًا لتبادل البيانات وملفات التكوين وخدمات الويب. في نظام Apple البيئي، تتوفر أدوات مدمجة من Foundation (فئة XMLParser) بالإضافة إلى مكتبات خارجية مثل SwiftXML للعمل مع XML في Swift. في هذه المقالة، سنشرح بالتفصيل كلا النهجين مع أمثلة كود لأنظمة iOS و macOS.



1. XMLParser المدمج من Foundation



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 يدويًا



لتوليد XML في Swift، يمكن استخدام السلاسل النصية أو مكتبة XMLDocument من Foundation (متاحة فقط على macOS). على iOS، سيتعين إنشاء XML يدويًا.



2.1. توليد XML عبر السلاسل النصية (iOS/macOS)



func createXMLString() -> String {    var xml = "<?xml version=\\"1.0\\" encoding=\\"UTF-8\\"?>"    xml += "<library>"    xml += "  <book id=\\"1\\">"    xml += "    <title>Swift Programming</title>"    xml += "    <author>Apple Inc.</author>"    xml += "  </book>"    xml += "</library>"    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: "Swi

توصيات