Trabalho com XML em Swift (iOS/macOS): Foundation e SwiftXML

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): guia completo



XML (eXtensible Markup Language) continua sendo um formato popular para troca de dados, arquivos de configuração e serviços web. No ecossistema Apple, para trabalhar com XML em Swift, estão disponíveis tanto as ferramentas integradas da Foundation (classe XMLParser) quanto bibliotecas de terceiros, como SwiftXML. Neste artigo, abordaremos detalhadamente ambas as abordagens com exemplos de código para iOS e macOS.



1. XMLParser integrado da Foundation



XMLParser é um parser SAX (sequencial, orientado a eventos). Ele não carrega todo o documento na memória, mas o analisa à medida que lê, chamando métodos do delegate. Isso é ideal para arquivos XML grandes.



1.1. Configuração básica e delegate



Crie uma classe que implemente o protocolo XMLParserDelegate. Métodos obrigatórios:



  • parser(_:didStartElement:namespaceURI:qualifiedName:attributes:) — chamado ao abrir uma tag.
  • parser(_:foundCharacters:) — recebe o conteúdo textual do elemento.
  • parser(_:didEndElement:namespaceURI:qualifiedName:) — chamado ao fechar uma tag.


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("Início do livro: \\(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("Título: \\(currentText.trimmingCharacters(in: .whitespacesAndNewlines))") } }}

// Usoif let url = Bundle.main.url(forResource: "books", withExtension: "xml"), let parser = XMLParser(contentsOf: url) { let handler = XMLHandler() parser.delegate = handler parser.parse()}


1.2. Tratamento de erros e namespaces



Implemente o método parser(_:parseErrorOccurred:) para registrar erros. Para trabalhar com namespaces, use os parâmetros namespaceURI e qualifiedName.



func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) {    print("Erro de parsing: \\(parseError.localizedDescription)")}


2. Criação manual de documentos XML



Para gerar XML em Swift, você pode usar strings ou a biblioteca XMLDocument da Foundation (disponível apenas no macOS). No iOS, é necessário criar XML manualmente.



2.1. Geração de XML via strings (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. Uso de XMLDocument (apenas 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

Recommendations