Comment analyser des fichiers XML dans Xcode

click fraud protection

Bien qu'un intégré XML l'analyseur ajoute une valeur réelle à une nouvelle application de bureau ou mobile, le codage de cette fonctionnalité nécessite généralement beaucoup de temps de développement et de tests bêta. Le programme Xcode d'Apple comprend un analyseur XML qui contourne la plupart de ce travail manuel.

Un XML peut contenir n'importe quoi, des données de base sur votre application à un flux RSS pour un site web. Ils peuvent également être un excellent moyen de mettre à jour les informations au sein de votre application à distance, évitant ainsi la nécessité de soumettre un nouveau binaire à Apple simplement pour ajouter un nouvel élément à une liste.

Le processus Xcode

Le processus Xcode intégré contient des étapes pour initialiser les variables à utiliser, démarrer le processus d'analyse XML, alimenter ce processus en un fichier, évaluer les éléments individuels et les caractères (valeur) au sein de ces éléments, reconnaître la fin d'un élément individuel et terminer l'analyse traiter.

instagram viewer

Utiliser l'analyseur XML

Pour illustrer les détails, nous allons analyser un exemple de fichier sur Internet en lui transmettant une adresse Web particulière (URL).

Commencez par créer le fichier d'en-tête. Ceci est un exemple de fichier d'en-tête très basique pour un contrôleur de vue détaillée avec les exigences minimales pour l'analyse de notre fichier:

@interface RootViewController: UITableViewController {
DetailViewController *detailViewController;
NSXMLParser *rssParser;
NSMutableArray *articles;
NSMutableDictionary *item;
NSString *currentElement;
NSMutableString *ElementValue;
BOOL errorParsing ;
}
@property (non atomique, conserver) IBOutlet DetailViewController *detailViewController;
- (void) parseXMLFileAtURL:(NSString *)URL;


La fonction parseXMLFileAtURL démarre le processus. Une fois terminé, les "articles" NSMutableArray contiennent les données. Le tableau se compose de dictionnaires modifiables avec des clés liées aux noms de champ dans le fichier XML.

Ensuite, initialisez le processus:

- (void) parserDidStartDocument:(NSXMLParser *)parser{
NSLog(@"Fichier trouvé et analyse commencée");
}

Cette fonction s'exécute au début du processus. Il n'est pas nécessaire de mettre quoi que ce soit dans cette fonction, mais si vous souhaitez effectuer une tâche lorsque le fichier commence à être analysé, c'est ici que vous placerez votre code.

Demander au programme de télécharger quelque chose

Ensuite, demandez au programme de télécharger quelque chose:

- (void) parseXMLFileAtURL:(NSString *)URL
{
NSString *agentString = @"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, comme Gecko) Version/3.2.1 Safari/525.27.1" ;
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL :
[NSURL URLWithString: URL]] ;
[request setValue: agentString forHTTPHeaderField:@"User-Agent"] ;
xmlFile = [ NSURLConnection sendSynchronousRequest: request returnResponse: nil error: nil ];
articles = [[NSMutableArray alloc] init] ;
errorParsing=NON;
rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: self] ;
// Vous devrez peut-être activer certains d'entre eux en fonction du type de fichier XML que vous analysez
[rssParser setShouldProcessNamespaces: NO] ;
[rssParser setShouldReportNamespacePrefixes: NO] ;
[rssParser setShouldResolveExternalEntities: NO] ;
[rssParser analyse] ;
}


Cette fonction demande au moteur de télécharger un fichier à une adresse Web particulière (URL) et de démarrer le processus d'analyse. Nous disons au serveur distant que nous sommes un Safari fonctionnant sur Mac au cas où le serveur essaierait de rediriger l'iPhone/iPad vers une version mobile.

Les options à la fin sont spécifiques à certains fichiers XML. La plupart des fichiers RSS et des fichiers XML génériques n'auront pas besoin d'être activés.

Erreur-Vérifiez le résultat

Effectuez quelques vérifications d'erreur de base sur le résultat:

- (void) analyseur :(NSXMLParser *)analyseur parseErrorOccurred :(NSError *)parseError {
NSString *errorString = [NSString stringWithFormat:@"Code d'erreur %i", [parseError code]];
NSLog(@"Erreur lors de l'analyse XML: %@", errorString);
errorParsing=OUI;
}Ce routage de vérification d'erreur définit une valeur binaire s'il rencontre une erreur. Vous aurez peut-être besoin de quelque chose de plus spécifique ici en fonction de ce que vous faites. Si vous avez simplement besoin d'exécuter du code après le traitement en cas d'erreur, le


Cette routine de vérification d'erreur définit une valeur binaire si elle rencontre une erreur. Vous aurez peut-être besoin de quelque chose de plus spécifique ici en fonction de ce que vous faites. Si vous avez simplement besoin d'exécuter du code après le traitement en cas d'erreur, la variable binaire d'analyse d'erreur peut être appelée à ce moment-là.

Analyser le contenu récupéré

Ensuite, le programme décompose le contenu récupéré et l'analyse:

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI QualifiedName:(NSString *)qName attributs:(NSDictionary *)attributeDict{
currentElement = [elementName copy];
ElementValue = [[NSMutableString alloc] init];
if ([elementName isEqualToString:@"item"]) {
item = [[NSMutableDictionary alloc] init];
}
}


La chair de l'analyseur XML contient trois fonctions, une qui s'exécute au début d'un individu élément, un qui s'exécute au milieu de l'analyse de l'élément et un qui s'exécute à la fin de l'élément élément.

Pour cet exemple, nous allons analyser un fichier similaire aux fichiers RSS qui décomposent les éléments en groupes sous le titre de éléments dans le fichier XML. Au début du traitement, nous vérifions le nom de l'élément "item" et allouons notre dictionnaire d'éléments lorsqu'un nouveau groupe est détecté. Sinon, nous initialisons notre variable pour la valeur:

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
[ElementValue appendString: chaîne] ;
}


Lorsque nous trouvons des caractères, nous les ajoutons simplement à notre variable ValeurÉlément:

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI QualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"item"]) {
[articles addObject:[item copy]] ;
} autre {
[item setObject: ElementValue forKey: elementName] ;
}
}

Que se passe-t-il lorsque l'analyse est terminée

Lorsque le programme a fini de traiter un élément, il doit faire l'une des deux choses suivantes:

  • Si l'élément final est Objet, nous avons terminé notre groupe, nous allons donc ajouter notre dictionnaire à notre liste d'articles.
  • Si l'élément n'est pas Objet, nous allons définir la valeur dans notre dictionnaire avec une clé qui correspond au nom de l'élément. (Cela signifie que nous n'avons pas besoin d'une variable individuelle pour chaque champ dans le fichier XML. Nous pouvons les traiter un peu plus dynamiquement.)

C'est la dernière fonction nécessaire à notre routine d'analyse; il termine le document. Mettez n'importe quel code final ici ou spécifiez un sous-programme de correction d'erreur:

- (void) parserDidEndDocument:(NSXMLParser *)parser {
if (errorParsing == NON)
{
NSLog(@"Traitement XML terminé !");
} autre {
NSLog(@"Une erreur s'est produite lors du traitement XML");
}
}

Sauvegarder les données

Une chose que de nombreuses applications pourraient vouloir faire ici est d'enregistrer les données ou le fichier XML dans un fichier sur l'appareil. De cette façon, si l'appareil n'est pas connecté à Internet lors du prochain chargement de l'application, il peut toujours accéder à ces informations.

Bien sûr, nous ne pouvons pas oublier la partie la plus importante: dire à votre application d'analyser le fichier (et lui donner une adresse Web pour le trouver !). Pour démarrer le processus, ajoutez cette ligne de code à l'endroit approprié où vous souhaitez effectuer le traitement XML:

 [self parseXMLFileAtURL:@" http://www.webaddress.com/file.xml"]; 
instagram story viewer