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"]} Auch in der Bibliothek
Bildverarbeitung in Node.js: resize und crop mit Sharp
Event Bus und Observer-Pattern in PHP: Implementierung und Beispiele
Arbeiten mit CSV in PHP: Lesen, Schreiben und Verarbeiten von Daten
Flyway Java: Vollständige Anleitung mit Beispielen
Catch2 Matchers für C++: Vollständiges Tutorial mit Beispielen