Trabalho com XML em Swift: parsing, criação e processamento de dados (iOS/macOS)

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalho com XML em Swift (iOS/macOS): do parsing à criação



XML (eXtensible Markup Language) continua sendo usado em sistemas legados, serviços web (SOAP, RSS) e arquivos de configuração. Em Swift para iOS/macOS não há uma biblioteca nativa com açúcar sintático, mas existe o poderoso XMLParser (parser SAX), além da popular biblioteca de terceiros AEXML (abordagem DOM). Neste artigo, abordaremos ambas as abordagens.



1. XMLParser nativo (abordagem SAX)



XMLParser é um parser orientado a eventos (SAX) do Foundation. Ele não carrega todo o documento na memória, mas chama métodos do delegate ao encontrar elementos. Ideal para arquivos grandes.



Exemplo: parsing de feed 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)) } }}

// Usolet xmlString = """<rss> <channel> <item><title>Swift 6.0</title></item> <item><title>Novos recursos do 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", "Novos recursos do Xcode"]}


Importante: foundCharacters pode ser chamado várias vezes para um mesmo nó de texto (especialmente com cirílico). Sempre acumule a string, não a atribua.



2. AEXML — biblioteca DOM conveniente



AEXML é uma biblioteca leve para trabalhar com XML no estilo DOM. Permite ler e criar XML sem gerenciamento manual de eventos. Instala-se via Swift Package Manager ou CocoaPods.



Instalação via Swift Package Manager

Adicione em Package.swift ou via Xcode: File → Add Packages → insira a URL: https://github.com/tadija/AEXML.git



Exemplo: leitura de XML



import AEXML

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

// Obtém o valor do elemento let name = root["user"]["name"].value ?? "" let age = root["user"]["age"].value ?? ""

// Acesso por atributo let id = root["user"].attributes["id"] ?? ""

return ["id": id, "name": name, "age": age] } catch { print("Erro de parsing: \\(error)") return nil }}

// Exemplo 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": "I

Recommendations