Travailler avec XML en Swift (iOS/macOS) : de l'analyse à la création
XML (eXtensible Markup Language) continue d'être utilisé dans les systèmes legacy, les services web (SOAP, RSS) et les fichiers de configuration. En Swift pour iOS/macOS, il n'existe pas de bibliothèque intégrée avec du sucre syntaxique, mais il y a un puissant XMLParser (analyseur SAX), ainsi qu'une bibliothèque tierce populaire AEXML (approche DOM). Dans cet article, nous aborderons les deux approches.
1. XMLParser intégré (approche SAX)
XMLParser est un analyseur orienté événements (SAX) de Foundation. Il ne charge pas l'intégralité du document en mémoire, mais appelle les méthodes du délégué lorsqu'il rencontre des éléments. Idéal pour les gros fichiers.
Exemple : analyse d'un flux RSS
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)) } }}
// Utilisationlet xmlString = """<rss> <channel> <item><title>Swift 6.0</title></item> <item><title>Nouvelles fonctionnalités Xcode</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", "Nouvelles fonctionnalités Xcode"]}Important : foundCharacters peut être appelé plusieurs fois pour un même nœud de texte (surtout avec le cyrillique). Accumulez toujours la chaîne, ne l'affectez pas.
2. AEXML — une bibliothèque DOM pratique
AEXML est une bibliothèque légère pour travailler avec XML dans le style DOM. Elle permet de lire et de créer du XML sans gestion manuelle des événements. Elle s'installe via Swift Package Manager ou CocoaPods.
Installation via Swift Package Manager
Ajoutez dans Package.swift ou via Xcode : File → Add Packages → entrez l'URL : https://github.com/tadija/AEXML.git
Exemple : lecture de XML
import AEXML
func parseWithAEXML(xmlString: String) -> [String: String]? { do { let xmlDoc = try AEXMLDocument(xml: xmlString) let root = xmlDoc.root
// Obtenir la valeur de l'élément let name = root["user"]["name"].value ?? "" let age = root["user"]["age"].value ?? ""
// Accès par attribut let id = root["user"].attributes["id"] ?? ""
return ["id": id, "name": name, "age": age] } catch { print("Erreur d'analyse : \\(error)") return nil }}
// Exemple 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"]} Aussi dans la bibliothèque
Travailler avec XML en Go (Golang) : la bibliothèque standard encoding/xml
Travailler avec Excel en JavaScript (Node.js) : bibliothèques et outils
Travailler avec Markdown en Java : bibliothèques, analyseurs et exemples
GraphQL Java : un outil puissant pour créer des API modernes en Java