Bene, semplifichiamoci la vita.
Ecco come fare un parser di un xml in modo facile e veloce in pochi passi!
ReverseGeo.h
[code lang=”java” autolinks=”false” collapse=”false” firstline=”1″ gutter=”true” htmlscript=”false” light=”false” padlinenumbers=”false” smarttabs=”true” tabsize=”4″ toolbar=”false”]
#import <foundation /Foundation.h>
@interface ReverseGeo : NSObject {
/* dichiarazioni */
NSXMLParser *revParser;
NSMutableDictionary *item;
NSString *currentElement;
/* Array contenenti i valori trovati nell’xml */
NSMutableArray *elements;
NSMutableString *citta,
*via,
*dug;
}
– (void) parseXMLFileAtURL: (NSString *) URL;
@end
[/code]
ReverseGeo.m
[code lang=”java” autolinks=”false” collapse=”false” firstline=”1″ gutter=”true” htmlscript=”false” light=”false” padlinenumbers=”false” smarttabs=”true” tabsize=”4″ toolbar=”false”]
#import "ReverseGeo.h"
@implementation ReverseGeo
– (void) parseXMLFileAtURL: (NSString *) URL {
@try {
elements = [[NSMutableArray alloc] init];
NSURL *xmlURL = [[NSURL alloc] initWithString:URL];
revParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
[revParser setDelegate:self];
[revParser setShouldProcessNamespaces:NO];
[revParser setShouldReportNamespacePrefixes:NO];
[revParser setShouldResolveExternalEntities:NO];
[revParser parse];
}@catch (NSException * e) { }
}
– (void) parserDidStartDocument: (NSXMLParser *) parser { }
– (void) parser: (NSXMLParser *) parser parseErrorOccurred: (NSError *) parseError {
NSLog(@"Errore nel parser!");
}
– (void) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName
namespaceURI: (NSString *) namespaceURI
qualifiedName: (NSString *) qName
attributes: (NSDictionary *) attributeDict {
currentElement = [elementName copy];
/* tag xml di partenza */
if ([elementName isEqualToString:@"RevGeo_Out"])
{
item = [[NSMutableDictionary alloc] init];
citta = [[NSMutableString alloc] init];
via = [[NSMutableString alloc] init];
dug = [[NSMutableString alloc] init];
}
}
– (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName
namespaceURI: (NSString *) namespaceURI
qualifiedName: (NSString *) qName{
if ([elementName isEqualToString:@"RevGeo_Out"])
{
/* riempio gli array con le chiavi */
[item setObject:citta forKey:@"citta"];
[item setObject:via forKey:@"via"];
[item setObject:via forKey:@"dug"];
[elements addObject:[item copy]];
}
}
– (void) parser: (NSXMLParser *) parser foundCharacters: (NSString *) string {
@try {
/* prendo i tag xml seguenti */
if ([currentElement isEqualToString:@"com"]) {
[citta appendString:string];
} else if ([currentElement isEqualToString:@"topo"]) {
[via appendString:string];
} else if ([currentElement isEqualToString:@"dug"]) {
[dug appendString:string];
}
}@catch (NSException *e) { }
}
– (void) parserDidEndDocument: (NSXMLParser *)parser { }
– (void) dealloc { [super dealloc]; }
@end[/code]
i due file sopra sono le definizioni per un corretto parser xml.
Ma… come si usa?
Beh, è più facile di quanto sembra!
[code lang=”java” autolinks=”false” collapse=”false” firstline=”1″ gutter=”true” htmlscript=”false” light=”false” padlinenumbers=”false” smarttabs=”true” tabsize=”4″ toolbar=”false”]/* dichiarazione e allocazione */
ReverseGeo reverse = [ReverseGeo new];
NSString *reverseUrl =
[[NSString alloc] initWithString:@"http://sito.xml"];
[reverse parseXMLFileAtURL:reverseUrl];
/* accesso ai campi */
NSLog(@"VIA: %@ – CITTA: %@", reverse->via, reverse->citta);[/code]
EOF!
[ref -> albertopasca.it]