http://www.zaachi.com/cs/items/vyvoj-aplikaci-pro-iphone-xml-parser-with-nsxmlparser.html

Vývoj aplikací pro iPhone: XML parser with NSXMLParser

Publikováno: 07.01.2011 11:33:14

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:

xmlparser

Pro další použití a informace se můžete podívat na class reference pro NSXMLParser ( http://developer.apple.com/...ence/Reference.html )