28 Jul, 2010 20:43

Usando XML em seus projetos iPhone

Primeiros passos

Nos nossos projetos, utilizamos partes da Google Data APIs Objective-C Client Library que fornece diversas ferramentas de desenvolvimento para Mac e iPhone.

Para começar a trabalhar com XML em seu projeto, baixe o projeto completo do Google ou, para simplificar, somente o arquivo XML.zip onde selecionamos apenas os recursos necessários para este exemplo. Depois, siga os seguintes passos:

  1. Crie uma pasta XML na raiz do seu projeto e copie GDataDefines.h e a pasta XMLSupport para a pasta;

  2. No Xcode, adicione a pasta criada ao seu projeto;

  3. Adicione também libxml2.dylib à lista de Frameworks;

  4. Em Get Info do seu projeto, na aba Build, para todas as configurações, adicione em Header Search Paths:
    /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include/libxml2 (Observe a versão do iOS no caminho acima. Pode ser necessário mudar de acordo com a versão utilizada pelo projeto.);

  5. Pronto. Agora você poderá usar o framework para fazer parser de XML.

Implementação

Agora que já temos o framework configurado em seu projeto, vamos usá-lo para fazer parser de um XML. Abaixo, um exemplo de XML:

<?xml version="1.0" encoding="utf-8"?>
<projetos>
    <projeto>
        <nome>Cine Mobits</nome>
        <descricao>Veja os horários do cinema direto do seu celular! Disponível para a maioria dos celulares com suporte a Java, iPhone/iPod Touch e também celulares com Android.</descricao>
    </projeto>
    <projeto>
        <nome>Mobits Button Soccer</nome>
        <descricao>O clássico futebol de botão, jogo presente na infância de muitas pessoas, agora em versão para iPhone/iPod Touch.</descricao>
    </projeto>
    <projeto>
        <nome>FaxGuru</nome>
        <descricao>Envie fax direto do seu iPhone! O FaxGuru permite que você tire fotos de documentos e envie-os via fax para mais de 250 países, além de ser simples, fácil de usar e totalmente em português.</descricao>
    </projeto>
</projetos>

A seguir, o código de parse:

#import "GDataDefines.h"
#import "Projeto.h"

@implementation ProjetosParser

+ (NSArray *)parse:(NSString *)xml {
    NSError *error = nil;

    NSXMLDocument *document = [[NSXMLDocument alloc] initWithXMLString:xml options:0 error:&error];
    NSXMLElement rootElement = [document rootElement];

    NSArray *projetosDoXML = [rootElement nodesForXPath:@"//projeto" error:&error];

    NSMutableArray *projetos = [NSMutableArray arrayWithCapacity:[projetosDoXML count]];

    for (NSXMLElement *projetoDoXML in projetosDoXML) {
        Projeto *projeto = [[Projeto alloc] init];
        projeto.nome = [[[projetoDoXML nodesForXPath:@"./nome/text()" error:nil] lastObject] stringValue];
        projeto.descricao = [[[projetoDoXML nodesForXPath:@"./descricao/text()" error:nil] lastObject] stringValue];

        [projetos addObject:projeto];
        [projeto release];
    }

    [document release];

    return projetos;
}

@end

A primeira coisa a ser feita é importar "GDataDefines.h". Se preferir, pode fazer a importação no pch e o parser ficará acessível para todas as classes do projeto.

Para começar a fazer o parse a partir de uma string XML, é preciso transformá-la em NSXMLDocument. Assim, conseguimos obter o elemento raiz do nosso XML. A partir daí, é só fazer as consultas XPath para obter as informações desejadas. No nosso exemplo, o método retorna um array de projetos.

Dica

Caso você se depare com um XML onde a raiz tem namespaces, a consulta XPath será da seguinte forma:

<projetos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">

projeto.nome = [[[projetoDoXML nodesForXPath:@"./*[local-name()=nome]/text()" error:nil] lastObject] stringValue];

Espero que este post seja útil! Como disse, o meu próximo assunto será sobre JSON. Aguardem!

Ao navegar neste site, você consente o uso de cookies nossos e de terceiros, que coletam informações anônimas e são essenciais para melhorar sua experiência em nosso site.