2010-03-19 3 views
0

Je les méthodes suivantes dans ma classe simple, personnalisée Parser, quand j'exécute APPELLE: sur mes données, je reçois ...Analyser XML: identifier/obtenir des données pour un élément spécifique?

Found: OK 
Found: 046 3433 5674 3422 4456 8990 1200 5284 

Ma question est de savoir comment pourrais-je aller à ajouter à ce afin que je puisse spécifiquement choisir l'information pour l'élément de données (voir ci-dessous), y a-t-il quelque chose que je puisse ajouter à la méthode - (void) parser: comment pourrais-je faire cela?

<data version="1.0">2046 3433 5674 3422 4456 8990 1200 5284</data> 

Voici les sections de mon code:

// CLASS: 

@interface CustomParser : NSObject <NSXMLParserDelegate> { 
} 
-(void)parseFile:(NSString *)pathToFile; 
@end 

@implementation CustomParser 

-(void)parseFile:(NSString *)pathToFile { 
    NSLog(@"parseXMLFile ... \"%@\"", pathToFile); 
    NSURL *url = [NSURL fileURLWithPath:pathToFile]; 
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 
    [parser setDelegate:self]; 
    [parser parse]; 
    [parser release]; 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
    NSLog(@"Found: %@", string); 
} 
@end 

.

//CALLED: 
CustomParser *newParser = [[CustomParser alloc] init]; 
[newParser parseFile:fileOnDisk]; 

... more 

[newParser release]; 

.

//DATA: 
<!DOCTYPE tubinerotationdata> 
<turbine version="1.0"> 
<status version="1.0" result="200">OK</status> 
<data version="1.0"> 
    2046 3433 5674 3422 4456 8990 1200 5284 
</data> 
</turbine> 

gary

+0

Je suppose que je devrais ajouter une variable d'instance pour suivre l'élément actuel, je ne suis pas sûr de savoir comment définir cette variable avec le nom d'élément/tag que parser: foundCharacters: est en cours de traitement. – fuzzygoat

Répondre

1

Vous devez mettre en œuvre les méthodes didStartElement et didEndElement et utiliser Ivars pour garder une trace du nom et la valeur de l'élément courant.

Exemple d'une façon de le faire:

//Instance variables: 
NSString *currentElementValue; 
NSString *statusValue; 
NSString *dataValue; 

En didStartElement:

currentElementValue = @""; 

En foundCharacters:

currentElementValue = [currentElementValue stringByAppendingString:string]; 

dans didEndElement:

if ([elementName isEqualToString:@"status"]) 
{ 
    statusValue = currentElementValue; 
} 
else 
if ([elementName isEqualToString:@"data"]) 
{ 
    dataValue = currentElementValue; 
} 

Vous pouvez également avoir un ivar qui conserve la trace du nom de l'élément courant et, dans foundCharacters, définir statusValue et dataValue en fonction de cela.

+0

Merci, je vais essayer, mais c'est exactement ce que je cherchais. Très appréciée. – fuzzygoat

Questions connexes