Arbeiten mit XML in Swift: Parsen, Erstellen und Verarbeiten von Daten (iOS/macOS)

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit XML in Swift (iOS/macOS): Vom Parsen bis zum Erstellen



XML (eXtensible Markup Language) wird weiterhin in Legacy-Systemen, Webdiensten (SOAP, RSS) und Konfigurationsdateien verwendet. In Swift für iOS/macOS gibt es keine integrierte Bibliothek mit syntaktischem Zucker, aber es gibt den leistungsstarken XMLParser (SAX-Parser) sowie die beliebte Drittanbieter-Bibliothek AEXML (DOM-Ansatz). In diesem Artikel werden beide Ansätze behandelt.



1. Integrierter XMLParser (SAX-Ansatz)



XMLParser ist ein ereignisgesteuerter (SAX) Parser aus Foundation. Er lädt nicht das gesamte Dokument in den Speicher, sondern ruft Delegatenmethoden beim Auftreten von Elementen auf. Ideal für große Dateien.



Beispiel: Parsen eines RSS-Feeds



import Foundation

class RSSParser: NSObject, XMLParserDelegate { private var currentElement = "" private var currentTitle = "" private var items: [String] = []

func parse(data: Data) -> [String] { let parser = XMLParser(data: data) parser.delegate = self parser.parse() return items }

// MARK: - XMLParserDelegate func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) { currentElement = elementName if elementName == "item" { currentTitle = "" } }

func parser(_ parser: XMLParser, foundCharacters string: String) { if currentElement == "title" { currentTitle += string } }

func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { if elementName == "title" && !currentTitle.isEmpty { items.append(currentTitle.trimmingCharacters(in: .whitespacesAndNewlines)) } }}

// Verwendunglet xmlString = """<rss> <channel> <item><title>Swift 6.0</title></item> <item><title>Neue Xcode-Features</title></item> </channel></rss>"""if let data = xmlString.data(using: .utf8) { let parser = RSSParser() let titles = parser.parse(data: data) print(titles) // ["Swift 6.0", "Neue Xcode-Features"]}


Wichtig: foundCharacters kann mehrmals für einen einzelnen Textknoten aufgerufen werden (insbesondere mit kyrillischen Zeichen). Akkumulieren Sie den String immer, weisen Sie ihn nicht zu.



2. AEXML — Praktische DOM-Bibliothek



AEXML ist eine leichte Bibliothek für die Arbeit mit XML im DOM-Stil. Ermöglicht das Lesen und Erstellen von XML ohne manuelle Ereignisverwaltung. Installation über Swift Package Manager oder CocoaPods.



Installation über Swift Package Manager

Fügen Sie es in Package.swift oder über Xcode hinzu: File → Add Packages → URL eingeben: https://github.com/tadija/AEXML.git



Beispiel: XML lesen



import AEXML

func parseWithAEXML(xmlString: String) -> [String: String]? { do { let xmlDoc = try AEXMLDocument(xml: xmlString) let root = xmlDoc.root

// Elementwert abrufen let name = root["user"]["name"].value ?? "" let age = root["user"]["age"].value ?? ""

// Zugriff über Attribut let id = root["user"].attributes["id"] ?? ""

return ["id": id, "name": name, "age": age] } catch { print("Parsing-Fehler: \\(error)") return nil }}

// Beispiel XMLlet xmlData = """<root> <user id="42"> <name>Ivan Petrov</name> <age>30</age> </user></root>"""if let result = parseWithAEXML(xmlString: xmlData) { print(result) // ["id": "42", "name": "Ivan Petrov", "age": "30"]}

Empfehlungen