J'essaye d'analyser un énorme document XML (décrivant un modèle 3d) avec la bibliothèque GdataxmlNode objective-c.Objective-C: Analyse XML avec gdata
Voici un échantillon de XML qui bloque moi:
<library_effects>
<effect name="Love_Love-fx" id="Love_Love-fx">
<profile_COMMON>
<newparam sid="sexy-surface">
<surface type="2D">
<init_from>sexy</init_from>
<format>A8R8G8B8</format>
</surface>
</newparam>
....
</profile_COMMON>
</effect>
....
</library_effects>
Mon objectif:
obtenir le nom d'effet (* Love_Love-fx *): fonctionne parfaitement
obtenir le contenu de init_from (sexy): ne fonctionne pas du tout
Voici comment je l'analyse syntaxique:
xmlGetData = [xmlDoc.rootElement elementsForName:@"library_effects"];
//Effects infos
int eff_c;
NSMutableArray *eff_ids = [[NSMutableArray alloc] init]; //effect names
NSMutableArray *eff_src = [[NSMutableArray alloc] init]; //efects sources
for (GDataXMLElement *e in xmlGetData)
{
eff_c = [[e elementsForName:@"effect"]count];
NSArray *eff_node = [e elementsForName:@"effect"];
for (int i = 0; i < eff_c; i++)
{
//get the effect name (id & name are the same)
[eff_ids addObject:[[eff_node objectAtIndex:i]attributeForName:@"id"]];
//get the content of init_from
[eff_src addObject:[[eff_node objectAtIndex:i]elementForName:@"init_from"]];
}
}
Mon problème: J'ai un SIGABRT sur la dernière ligne ([eff_src addObject.........
) donc je ne parviens pas à obtenir le contenu de « init_from "
(car renvoie zéro. ?)
Quelqu'un pourrait-il m'aider? (? Y at-il une documentation complète & clair que je ne voyais billet de blog expliquant une partie de celui-ci)
solution Disgusting: En utilisant [[[[[[eff_node objectAtIndex:i]childAtIndex:0]childAtIndex:0]childAtIndex:0]childAtIndex:0]stringValue];
en utilisant votre 'GDataXMLElement * initFrom = [[eff_node objectAtIndex: i] elementForName : @ "init_from"]; ' donne moi initFrom = nil donc même problème: x (je n'ai pas ajouté le if() car j'ai besoin de toutes ces informations dans tous les cas) – IggY
@IggY Vous avez besoin de' if' parce que vous ne peut pas mettre 'nil' dans un' NSArray'. C'est ce qui provoque votre SIGABRT. Vous obtenez soit zéro parce que la méthode 'elementForName:' ne recherche pas récursivement ou parce que vous avez des éléments sans sous-nœuds 'init_from'. – JeremyP
Ok, j'ai eu pourquoi j'ai besoin de si, désolé c'était stupide ^^ Cependant, init_from est TOUJOURS = nil: x Alors Comment puis-je ignorer le fait que 'elementForName' n'est pas récursif? – IggY