[RESOLU] sélection multiple dans un NSXMLDocument
Philippe49
Membre
Bonjour,
je n'arrive pas à faire exécuter une XPath avec sélection multiple dans un document NSXML
quelqu'un connait-il le sujet ?
@interface NSXMLDocument (category)
+(NSXMLDocument*)createXMLDocumentFromFile:(NSString*)path;
@end
int main(int argc, char * argv[] ){
NSAutoreleasePool * pool=[NSAutoreleasePool new];
// création du document
NSXMLDocument * xmlDoc;
NSString * path=[NSHomeDirectory() stringByAppendingPathComponent:@Desktop/carnet.xml];
xmlDoc=[NSXMLDocument createXMLDocumentFromFile:path];
NSError * error;
NSArray * nodes;
#define findAndLog(xpath) \
nodes=[[xmlDoc rootElement] nodesForXPath:xpath error:&error];\
if(error){ \
NSLog(@%@",error); \
}else{ \
printf("%s\n",[[nodes description] UTF8String]);\
}\
findAndLog( @//personne/adresse|telephone );
Le résultat ne contient que les noeuds adresse, sans qu'il y ait erreur de syntaxe.
Naturellement mes noeuds "personne" ont des fils "adresse" et "telephone"
je n'arrive pas à faire exécuter une XPath avec sélection multiple dans un document NSXML
quelqu'un connait-il le sujet ?
@interface NSXMLDocument (category)
+(NSXMLDocument*)createXMLDocumentFromFile:(NSString*)path;
@end
int main(int argc, char * argv[] ){
NSAutoreleasePool * pool=[NSAutoreleasePool new];
// création du document
NSXMLDocument * xmlDoc;
NSString * path=[NSHomeDirectory() stringByAppendingPathComponent:@Desktop/carnet.xml];
xmlDoc=[NSXMLDocument createXMLDocumentFromFile:path];
NSError * error;
NSArray * nodes;
#define findAndLog(xpath) \
nodes=[[xmlDoc rootElement] nodesForXPath:xpath error:&error];\
if(error){ \
NSLog(@%@",error); \
}else{ \
printf("%s\n",[[nodes description] UTF8String]);\
}\
findAndLog( @//personne/adresse|telephone );
Le résultat ne contient que les noeuds adresse, sans qu'il y ait erreur de syntaxe.
Naturellement mes noeuds "personne" ont des fils "adresse" et "telephone"
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
findAndLog( @//personne/(telephone|adresse) );
Néammoins, si quelqu'un connait, merci de confirmer !
Le "OU" (pipe) fait une unification en XPath, mais n'est pas prioritaire par rapport au séparateur d'étapes "/". Donc soit tu répètes tout ton chemin, genre [tt]//personne/telephone|//personne/adresse[/tt] soit tu parenthèses comme tu as fait... ce qui est en fait mieux car bien plus clair !
Je suis en train de faire un tuto qui traduit la doc NSXML et la complète par des essais.
J'aurais peut-être (surement) encore quelques questions ...
Il traduit la doc d'Apple 'Tree-Based XML Programming Guide for
Cocoa' en l'agrémentant de quelques exemples simplistes.
A cette date du 31 Août, il reste à traduire et tester la partie interface graphique et XML (bindings && NSTreeController), mais tout le reste est fait (XPath,XQuery,DTD, ...) avec un peu plus que le document d'Apple.
Merci des retours.
Une fois les corrections effectuées, on pourra mettre le site en article sur O.C (il pèse déjà 10 Mo)