SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
27.11.2024

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!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!