parseur qui fonctionne mais rien n'est affiché
wael.m
Membre
[font=helvetica, arial, sans-serif]J'ai developpé une application pour parser unfichier xml mais lors de l'execution l'application tourne mais rien n'est affiché.[/font]
voila mon code veridiez avec moi SVP
[font=Arial,]
@interface MyData : NSObject {[/font]
NSMutableString *currentElementValue;
User *user;
NSMutableArray *users;
}
-(MyData *) initXMLParser;
-(BOOL)parseDocumentWithData:(NSData *)data;
@property (nonatomic, retain) User *user;
@property (nonatomic, retain) NSMutableArray *users;
@implementation MyData
@synthesize user;
@synthesize users;
- (MyData *) initXMLParser {
[super init];
// init array of user objects
users = [[NSMutableArray alloc] init];
return self;
}
-(BOOL)parseDocumentWithData:(NSData *)data {
NSString * filePath = [color=#2B91AF]NSBundle[/color] mainBundle] pathForResource:@[color=#800000]"Users"[/color] ofType:@[color=#800000]"xml"[/color;
data = [NSData dataWithContentsOfFile:filePath];
if (data == nil)
return NO;
// this is the parsing machine
NSXMLParser *xmlparser = [[NSXMLParser alloc] initWithData:data];
// this class will handle the events
[xmlparser setDelegate:self];
[xmlparser setShouldResolveExternalEntities:NO];
// now parse the document
BOOL ok = [xmlparser parse];
if (ok == NO)
NSLog"error");
else
NSLog"OK");
[xmlparser release];
return ok;
}
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if"user"]) {
NSLog"user element found – create a new instance of User class...");
user = [[User alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (!currentElementValue) {
// init the ad hoc string with the value
currentElementValue = [color=#2B91AF]NSMutableString[/color] alloc] initWithString:[color=#00008B]string[/color;
} else {
// append value to the ad hoc string
[currentElementValue appendString:string];
}
NSLog"Processing value for : %@", string);
}
- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName {
if"users"]) {
// We reached the end of the XML document
return;
}
if"user"]) {
// object to our user array
[users addObject:user];
// release user object
[user release];
user = nil;
} else {
[user setValue:currentElementValue forKey:elementName];
}
[currentElementValue release];
currentElementValue = nil;
}
@end
voila mon code veridiez avec moi SVP
[font=Arial,]
@interface MyData : NSObject {[/font]
NSMutableString *currentElementValue;
User *user;
NSMutableArray *users;
}
-(MyData *) initXMLParser;
-(BOOL)parseDocumentWithData:(NSData *)data;
@property (nonatomic, retain) User *user;
@property (nonatomic, retain) NSMutableArray *users;
@implementation MyData
@synthesize user;
@synthesize users;
- (MyData *) initXMLParser {
[super init];
// init array of user objects
users = [[NSMutableArray alloc] init];
return self;
}
-(BOOL)parseDocumentWithData:(NSData *)data {
NSString * filePath = [color=#2B91AF]NSBundle[/color] mainBundle] pathForResource:@[color=#800000]"Users"[/color] ofType:@[color=#800000]"xml"[/color;
data = [NSData dataWithContentsOfFile:filePath];
if (data == nil)
return NO;
// this is the parsing machine
NSXMLParser *xmlparser = [[NSXMLParser alloc] initWithData:data];
// this class will handle the events
[xmlparser setDelegate:self];
[xmlparser setShouldResolveExternalEntities:NO];
// now parse the document
BOOL ok = [xmlparser parse];
if (ok == NO)
NSLog"error");
else
NSLog"OK");
[xmlparser release];
return ok;
}
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if"user"]) {
NSLog"user element found – create a new instance of User class...");
user = [[User alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (!currentElementValue) {
// init the ad hoc string with the value
currentElementValue = [color=#2B91AF]NSMutableString[/color] alloc] initWithString:[color=#00008B]string[/color;
} else {
// append value to the ad hoc string
[currentElementValue appendString:string];
}
NSLog"Processing value for : %@", string);
}
- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName {
if"users"]) {
// We reached the end of the XML document
return;
}
if"user"]) {
// object to our user array
[users addObject:user];
// release user object
[user release];
user = nil;
} else {
[user setValue:currentElementValue forKey:elementName];
}
[currentElementValue release];
currentElementValue = nil;
}
@end
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
2) ça veut dire quoi "Rien n'est affiché". C'est normal, c'est du code pour parser du XML, à quoi t'attends-tu ?
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
- (void)parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validError
2) Au lieu des NSLog(), utilise plutôt le débogueur en plaçant des points d'arrêt (breakpoints) dans la marge. C'est plus simple, ça donne plus d'infos, ça ne nécessite pas de modifier le code. C'est pas du PHP.
3) Une méthode d'init ne s'écrit pas ainsi ? Pourquoi s'appelle-t-elle initXMLParser, et pas init tout court ? (Voire initWithData:, mais ça, tu comprendras plus tard).