www.www.zaachi.com » Blog/Vývoj pro iPhone » Vývoj aplikací pro iPhone: XML parser with NSXMLParser

Parser XML v iPhone pomoci NSXMLParser pro rozparsování jednoduchého XML dokumentu.
Vytvoříme si jednoduchý program, který bude schopný načíst XML z webového serveru, rozparsovat jej a zobrazit výsledek v konzoli.
Ve vytvořeném projektu můžete využít kteroukoli třídu. Nejprve si upravíme .h soubor, do kterého musíme přidat delegate class pro NSXMLParser. Upravíme si interface do tvaru:
@interface MyClass : NSObject{
V kódu může být NSObject zastoupen jiným rozhraním, takže kódem můžete pouze rozšířit stávající aplikaci.
Jako další si do rozhraní dopíšeme metody pro zpracování XML, které bude NSXNLParser volat
//nacteni XML a vytvoreni parseru - (void)parseXMLFileAtURL; //zacatek parsovani dokoumentu - (void)parserDidStartDocument:(NSXMLParser *)parser; //zacatek elementu - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict; //konec elementu - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName; //nalezene znaky uvnitr elementu - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
V posledním kroku musíme dopsat jednotlivé metody pro parser v .m souboru.
Začneme metodou parseXMLFileAtURL, která je stěžejní:
- (void)parseXMLFileAtURL
{
//vytvori novou URL adresu, smerujici na XML
NSURL *xmlURL = [NSURL URLWithString:@"http://domain.com/xml.xml"];
//nova instance NSXMLParser. inicializace s vytvorenou url adresou
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
//nastaveni self jako deletat parseru
[parser setDelegate:self];
//nastaveni vlastnosti parseru
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
[parser release];
}
Při vytvoření parseru pomoc [NSXMLParser alloc] může dojít v některé verzi xCode při kompilaci k chybě, kdy parser oznámí že nemohl parser najít, v tom případě použijte pro vytvoření instance:
NSXMLParser *parser = [[ NSClassFromString(@"NSXMLParser") alloc] initWithContentsOfURL:xmlURL];
Další metody parseru jsou vcelku jednoduché, v našem případě budeme jejich vstupní hodnoty pouze logovat do logu (xCode - Run - Console).
//zacatek parsovani dokoumentu
- (void)parserDidStartDocument:(NSXMLParser *)parser{
NSLog(@"Zacatek parsovani dokumentu");
}
//zacatek elementu
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
NSLog(@"zacatek elementu: %@", elementName);
}
//konec elementu
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
NSLog(@"konec elementu %@", elementName);
}
//nalezene znaky uvnitr elementu
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if (string) {
NSLog(@"nalezene znaky uvnitr elementu %@", string);
}
}
A tím je celý XML parser hotový. Po spuštění a při správné funkčnosti uvidíte výsledek podobný tomuto:
Pro další použití a informace se můžete podívat na class reference pro NSXMLParser (http://developer.apple.com/...ence/Reference.html)

Autor: Zaachi
Publikováno: 7.1.2011 11:33:14
Vývoj aplikací pro iPhone: použití SqLite v iPhone
Vývoj aplikací pro iPhone: Hello World app
Vývoj aplikací pro iPhone: simple switchViewer
Vývoj aplikací pro iPhone: UIScrollView – skrolovací obrazovka