L'analyse de ce fichier XML avec touchXML
-
13-11-2019 - |
Question
J'ai ce fichier XML:
<continents>
<continent1 id="EUR" name="EUROPE"></continent1>
<continent2 id="AME" name="AMERICA"></continent2>
</continents>
J'ai essayé de le faire avec NSXMLParser, mais je ne peux pas montrer les résultats dans le même temps, je voudrais l'essayer avec touchXML quelqu'un peut m'aider?merci.
La solution
"L'Europe" et "l'Amérique" sont des attributs de vos tags.Attributs définis comme "nom" dans la balise.Vous devriez vraiment se familiariser avec NSXMLParser
et l'événement piloté par la méthode dans laquelle il analyse.Fondamentalement, vous créer un NSObject
la sous-classe pour être le délégué de l' NSXMLParser
et comme il rencontre des éléments qu'il appelle délégué méthodes sur votre objet personnalisé.Et cette très simple XML est un parfait exemple pour apprendre.Par exemple.
Ce code utilise l'ARC.
SimpleExampleParse.h:
@interface SimpleExampleParse : NSObject <NSXMLParserDelegate>
@property (strong, nonatomic) NSMutableArray *continents;
-(id)initWithString:(NSString *)stringToParse;
@end
SimpleExampleParse.m:
#import "SimpleExampleParse.h"
@implementation SimpleExampleParse{
NSXMLParser *myParser;
}
@synthesize continents;
-(id)initWithString:(NSString *)stringToParse{
if ((self = [super init])){
myParser = [[NSXMLParser alloc] initWithData:[stringToParse dataUsingEncoding:NSUTF8StringEncoding]];
myParser.delegate = self;
self.continents = [[NSMutableArray alloc] init];
[myParser parse];
}
return self;
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
// Check to see if this element has an attribute "name".
NSString *name = [attributeDict objectForKey:@"name"];
// If name is not nil add it to our Array
if (name) [continents addObject:name];
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
// We don't care your XML contains no content
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
// We don't care your XML contains no content
}
@end
Cette classe est utilisée comme ceci:
NSString *stringToParse = @"<continents><continent1 id=\"EUR\" name=\"EUROPE\"></continent1><continent2 id=\"AME\" name=\"AMERICA\"></continent2></continents>";
SimpleExampleParse *parser = [[SimpleExampleParse alloc] initWithString:stringToParse];
NSLog(@"contenents %@",parser.continents);
La sortie du journal:
contenents (
EUROPE,
AMERICA
)
Merci maintenant que vous avez quelque chose qui marche devant vous, prenez le temps de l'étudier et d'examiner comment il fonctionne.