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:
1 |
@interface MyClass : NSObject <nsxmlparserDelegate> { |
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
1 2 3 4 5 6 7 8 9 10 |
//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í:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
- (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:
1 |
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).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//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)