[RESOLU] sélection multiple dans un NSXMLDocument

Philippe49Philippe49 Membre
août 2007 modifié dans Actualités #1
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"

Réponses

  • Philippe49Philippe49 Membre
    09:36 modifié #2
    Oops désolé, c'est tout simplement qu'il faut parenthéser :

    findAndLog( @//personne/(telephone|adresse) );

    Néammoins, si quelqu'un connait, merci de confirmer !
  • AliGatorAliGator Membre, Modérateur
    09:36 modifié #3
    Je bosse à  fond sur les XPath en ce moment (enfin sauf que je suis en vacances là  mais bon:P) et je te confirme ça en effet :)
    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 !
  • Philippe49Philippe49 Membre
    09:36 modifié #4
    Merci,

    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 ...


  • Philippe49Philippe49 Membre
    09:36 modifié #5
    Voici un tutoriel sur NSXML en objective C sous la forme d'un site.

    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)
Connectez-vous ou Inscrivez-vous pour répondre.