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:
Crie uma pasta XML na raiz do seu projeto e copie GDataDefines.h e a pasta XMLSupport para a pasta;
No Xcode, adicione a pasta criada ao seu projeto;
Adicione também libxml2.dylib à lista de Frameworks;
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.);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!