parseur qui fonctionne mais rien n'est affiché

[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
Mots clés:

Réponses

  • CéroceCéroce Membre, Modérateur
    1) Utilise la balise CODE, parce que moi, je ne vais même pas prendre la peine de lire.

    2) ça veut dire quoi "Rien n'est affiché". C'est normal, c'est du code pour parser du XML, à  quoi t'attends-tu ?
  • <br />
    @interface MyData : NSObject {<br />
    NSMutableString *currentElementValue;<br />
    User *user;<br />
    NSMutableArray *users;<br />
    }<br />
    -(MyData *) initXMLParser;<br />
    -(BOOL)parseDocumentWithData:(NSData *)data;<br />
    @property (nonatomic, retain) User *user;<br />
    @property (nonatomic, retain) NSMutableArray *users;<br />
    <br />
    @implementation MyData<br />
    @synthesize user;<br />
    @synthesize users;<br />
    <br />
    - (MyData *) initXMLParser {<br />
    [super init];<br />
    // init array of user objects<br />
    users = [[NSMutableArray alloc] init];<br />
    return self;<br />
    }<br />
    -(BOOL)parseDocumentWithData:(NSData *)data {<br />
    NSString * filePath = [[NSBundle mainBundle] pathForResource:@&quot;Users&quot; ofType:@&quot;xml&quot;];<br />
    data = [NSData dataWithContentsOfFile:filePath];<br />
    if (data == nil)<br />
    return NO;<br />
    // this is the parsing machine<br />
    NSXMLParser *xmlparser = [[NSXMLParser alloc] initWithData:data];<br />
    // this class will handle the events<br />
    [xmlparser setDelegate:self];<br />
    [xmlparser setShouldResolveExternalEntities:NO];<br />
    // now parse the document<br />
    BOOL ok = [xmlparser parse];<br />
    if (ok == NO)<br />
    NSLog(@&quot;error&quot;);<br />
    else<br />
    NSLog(@&quot;OK&quot;);<br />
    [xmlparser release];<br />
    return ok;<br />
    }<br />
    - (void)parser:(NSXMLParser *)parser<br />
    didStartElement:(NSString *)elementName<br />
    namespaceURI:(NSString *)namespaceURI<br />
    qualifiedName:(NSString *)qualifiedName<br />
    attributes:(NSDictionary *)attributeDict {<br />
    if ([elementName isEqualToString:@&quot;user&quot;]) {<br />
    NSLog(@&quot;user element found – create a new instance of User class...&quot;);<br />
    user = [[User alloc] init];<br />
    }<br />
    }<br />
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {<br />
    if (&#33;currentElementValue) {<br />
    // init the ad hoc string with the value<br />
    currentElementValue = [[NSMutableString alloc] initWithString:string];<br />
    } else {<br />
    // append value to the ad hoc string<br />
    [currentElementValue appendString:string];<br />
    }<br />
    NSLog(@&quot;Processing value for : %@&quot;, string);<br />
    }<br />
    - (void)parser:(NSXMLParser *)parser<br />
    didEndElement:(NSString *)elementName<br />
    namespaceURI:(NSString *)namespaceURI<br />
    qualifiedName:(NSString *)qName {<br />
    if ([elementName isEqualToString:@&quot;users&quot;]) {<br />
    // We reached the end of the XML document<br />
    return;<br />
    }<br />
    if ([elementName isEqualToString:@&quot;user&quot;]) {<br />
    // object to our user array<br />
    [users addObject:user];<br />
    // release user object<br />
    [user release];<br />
    user = nil;<br />
    } else {<br />
    [user setValue:currentElementValue forKey:elementName];<br />
    }<br />
    [currentElementValue release];<br />
    currentElementValue = nil;<br />
    }<br />
    @end<br />
    
  • ça veut dire les mesages de verifications du parsing ne sont pas affichés comme cette commande par exemple : "NSLog"Processing value for : %@", string);", ça veut dire que lors de l'execution j'ai une fenetre vide. je developpe une application cocao . et moi je veux apres parser les données je veux les afficher dans un combobox mais je me plante à  l'etape du parsing
  • CéroceCéroce Membre, Modérateur
    juillet 2012 modifié #5
    1) Implémente aussi les méthodes d'erreur:



    - (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).
  • ok merci je vais essayer
Connectez-vous ou Inscrivez-vous pour répondre.