Lição: 151: Analisando XML e HTML em Swift
Analisar XML e HTML é uma tarefa comum ao trabalhar com dados da web ou arquivos de configuração. Em Swift, podemos utilizar bibliotecas como XMLParser
para XML e bibliotecas de terceiros como SwiftSoup
para analisar HTML. Nesta aula, exploraremos ambas as abordagens com exemplos.
Analisando XML com XMLParser
A classe XMLParser
em Swift fornece uma maneira simples de analisar dados XML. Ela utiliza o padrão de delegate, o que significa que você implementará os métodos de XMLParserDelegate
para lidar com vários eventos de análise.
Exemplo: Analisando um Arquivo XML
Imagine que você tenha os seguintes dados XML:
<livros>
<livro>
<titulo>O Grande Gatsby</titulo>
<autor>F. Scott Fitzgerald</autor>
</livro>
<livro>
<titulo>1984</titulo>
<autor>George Orwell</autor>
</livro>
</livros>
Você pode analisar esses dados XML da seguinte maneira:
import Foundation
class Livro: Codable {
var titulo: String
var autor: String
init(titulo: String, autor: String) {
self.titulo = titulo
self.autor = autor
}
}
class XMLLivroParser: NSObject, XMLParserDelegate {
var livros: [Livro] = []
var elementoAtual: String = ""
var tituloAtual: String = ""
var autorAtual: String = ""
func analisarXML(data: Data) {
let parser = XMLParser(data: data)
parser.delegate = self
parser.parse()
}
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
elementoAtual = elementName
}
func parser(_ parser: XMLParser, foundCharacters string: String) {
switch elementoAtual {
case "titulo":
tituloAtual += string
case "autor":
autorAtual += string
default:
break
}
}
func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if elementName == "livro" {
let livro = Livro(titulo: tituloAtual, autor: autorAtual)
livros.append(livro)
tituloAtual = ""
autorAtual = ""
}
}
func parserDidEndDocument(_ parser: XMLParser) {
print("Livros Analisados:")
for livro in livros {
print("Título: \(livro.titulo), Autor: \(livro.autor)")
}
}
}
// Exemplo de uso:
let xmlString = """
<livros>
<livro>
<titulo>O Grande Gatsby</titulo>
<autor>F. Scott Fitzgerald</autor>
</livro>
<livro>
<titulo>1984</titulo>
<autor>George Orwell</autor>
</livro>
</livros>
"""
if let data = xmlString.data(using: .utf8) {
let parser = XMLLivroParser()
parser.analisarXML(data: data)
}
Nesse código, lemos os dados XML e criamos uma classe Livro
para armazenar o título e o autor. A classe XMLLivroParser
implementa os métodos de XMLParserDelegate
para processar o XML.
Analisando HTML com SwiftSoup
Ao lidar com HTML, SwiftSoup
é uma biblioteca poderosa para analisar e extrair dados de HTML. Você pode instalar SwiftSoup
usando o Swift Package Manager.
Exemplo: Analisando HTML
Suponha que você tenha o seguinte conteúdo HTML:
<html>
<head><title>Página de Exemplo</title></head>
<body>
<h1>Bem-vindo à Página de Exemplo</h1>
<p>Este é um parágrafo de exemplo.</p>
<a href="https://example.com">Link de Exemplo</a>
</body>
</html>
Veja como analisar esse HTML usando SwiftSoup
:
import SwiftSoup
let htmlString = """
<html>
<head><title>Página de Exemplo</title></head>
<body>
<h1>Bem-vindo à Página de Exemplo</h1>
<p>Este é um parágrafo de exemplo.</p>
<a href="https://example.com">Link de Exemplo</a>
</body>
</html>
"""
do {
let documento = try SwiftSoup.parse(htmlString)
if let titulo = try documento.title() {
print("Título: \(titulo)")
}
let h1 = try documento.select("h1").first()
if let textoH1 = try h1?.text() {
print("H1: \(textoH1)")
}
let paragrafo = try documento.select("p").first()
if let textoParagrafo = try paragrafo?.text() {
print("Parágrafo: \(textoParagrafo)")
}
let link = try documento.select("a").first()
if let hrefLink = try link?.attr("href"),
let textoLink = try link?.text() {
print("Link: \(textoLink), URL: \(hrefLink)")
}
} catch {
print("Erro ao analisar HTML: \(error)")
}
Nesse exemplo, analisamos a string HTML para extrair o título da página, o texto de uma tag <h1>
, um parágrafo e o primeiro hyperlink.
Conclusão
Nesta aula, cobrimos como analisar dados XML usando XMLParser
e como analisar conteúdo HTML utilizando SwiftSoup
. Esses métodos são essenciais para lidar com dados extraídos de diversas fontes em suas aplicações Swift. Com essas ferramentas, você pode recuperar e manipular eficazmente os dados que precisa. Bom código!