[Resolu] Recuperer la valeur de l'attributs d'un élément dans un fichier XML
J'essai de recuperer les attributs d'un element de mon fichier XML dont la structure est la suivante:
<commands>
<command id="84" crypt="0">
<NbreSecEnCours>4</NbreSecEnCours>
<IdSession NomAppli="MSOutlook_APP02" NameMach="APPS-MLH-P01"
GuidSession="69c1575e-b3b7-4695-98b6-ab9c2cc5de98">7</IdSession>
<IdSession NomAppli="VMClient" NameMach="APPS-MLH-P01"
GuidSession="69c1575e-b3b7-4695-98b6-ab9c2cc5de98">7</IdSession>
<IdSession NomAppli="CRM" NameMach="APPS-MLH-P01"
GuidSession="bf6dfd59-cdae-4197-b9ac-213ebeef83f2">9</IdSession>
<IdSession NomAppli="MSOutlook_APP02" NameMach="APPS-MLH-P01"
GuidSession="bf6dfd59-cdae-4197-b9ac-213ebeef83f2">9</IdSession>
</command>
</commands>
j'aimerais etre a mesure de recuper les valeur de "NomAppli" "NameMach" "GuidSession".......
mais malheureusement je n'y parviens pas voici comment j'aborde le probleme en dessous le contenu de mon fichier pour parser
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
currentElement = [elementName copy];
//currentElement = [attributeDict copy];
//NSLog(@%@", currentElement);
if ([elementName isEqualToString:@command]) {
item = [[NSMutableDictionary alloc]init];
//currentNode = [[NSMutableString alloc]init];
//Récupération du numéro de la requete
NSLog(@id = %@",[attributeDict objectForKey:@id]);
currentNbreSecEnCours = [[NSMutableString alloc]init];
currentIdSession = [[NSMutableString alloc]init];
}
}
// Found Character
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if ([currentElement isEqualToString:@NbreSecEnCours]) {
[currentNbreSecEnCours appendString:string];
}
if ([currentElement isEqualToString:@IdSession]) {
[currentIdSession appendString:string];
}
}
// End Element
- (void) parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@command]) {
//[item setObject:currentNode forKey:@Username];
[item setObject:currentNbreSecEnCours forKey:@NbreSecEnCours];
[item setObject:currentIdSession forKey:@IdSession];
[commandes addObject:item];
NSLog(@[didEndElement]commandes: %@",commandes);
}
}
//
//-(NSString*)getElementValue:(NSString*)Node{
-(NSMutableArray*)getElementValue{
//NSString *nodeValue;
NSString *nbreSecEnCours;
NSString *idSession;
NSMutableArray *results = [[NSMutableArray alloc]init];
for (NSMutableDictionary *val in commandes) {
nbreSecEnCours= [val objectForKey:@NbreSecEnCours];
nbreSecEnCours = [ nbreSecEnCours stringByReplacingOccurrencesOfString:@\n withString:@""];
nbreSecEnCours = [ nbreSecEnCours stringByReplacingOccurrencesOfString:@\t withString:@""];
[results addObject: nbreSecEnCours];
NSLog(@NombreSession:%@",nbreSecEnCours);
idSession = [val objectForKey:@IdSession];
idSession = [idSession stringByReplacingOccurrencesOfString:@\n withString:@""];
idSession = [idSession stringByReplacingOccurrencesOfString:@\t withString:@""];
[results addObject:idSession];
}
//return nodeValue;
NSLog(@results= %@",results);
return results;
}
[/code]
J'ai aussi une deuxieme preoccupation , pour le projet sur lequel je suis entrain de travailler je dois parser un bon nombre de fichier car recuperer via une serveur Web distant j'aimerais savoir s'il est possible de faire un parseur gernerique pour ne pas avoir à creer autant de fichier pour parser que de fichier XML recu .
Merci d'avance .
Je suis Novice en Objective-C celà fait juste deux semaine que je connais le langage donc si mes questions vous semblent idiotes soyez indulgent
<commands>
<command id="84" crypt="0">
<NbreSecEnCours>4</NbreSecEnCours>
<IdSession NomAppli="MSOutlook_APP02" NameMach="APPS-MLH-P01"
GuidSession="69c1575e-b3b7-4695-98b6-ab9c2cc5de98">7</IdSession>
<IdSession NomAppli="VMClient" NameMach="APPS-MLH-P01"
GuidSession="69c1575e-b3b7-4695-98b6-ab9c2cc5de98">7</IdSession>
<IdSession NomAppli="CRM" NameMach="APPS-MLH-P01"
GuidSession="bf6dfd59-cdae-4197-b9ac-213ebeef83f2">9</IdSession>
<IdSession NomAppli="MSOutlook_APP02" NameMach="APPS-MLH-P01"
GuidSession="bf6dfd59-cdae-4197-b9ac-213ebeef83f2">9</IdSession>
</command>
</commands>
j'aimerais etre a mesure de recuper les valeur de "NomAppli" "NameMach" "GuidSession".......
mais malheureusement je n'y parviens pas voici comment j'aborde le probleme en dessous le contenu de mon fichier pour parser
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
currentElement = [elementName copy];
//currentElement = [attributeDict copy];
//NSLog(@%@", currentElement);
if ([elementName isEqualToString:@command]) {
item = [[NSMutableDictionary alloc]init];
//currentNode = [[NSMutableString alloc]init];
//Récupération du numéro de la requete
NSLog(@id = %@",[attributeDict objectForKey:@id]);
currentNbreSecEnCours = [[NSMutableString alloc]init];
currentIdSession = [[NSMutableString alloc]init];
}
}
// Found Character
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if ([currentElement isEqualToString:@NbreSecEnCours]) {
[currentNbreSecEnCours appendString:string];
}
if ([currentElement isEqualToString:@IdSession]) {
[currentIdSession appendString:string];
}
}
// End Element
- (void) parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@command]) {
//[item setObject:currentNode forKey:@Username];
[item setObject:currentNbreSecEnCours forKey:@NbreSecEnCours];
[item setObject:currentIdSession forKey:@IdSession];
[commandes addObject:item];
NSLog(@[didEndElement]commandes: %@",commandes);
}
}
//
//-(NSString*)getElementValue:(NSString*)Node{
-(NSMutableArray*)getElementValue{
//NSString *nodeValue;
NSString *nbreSecEnCours;
NSString *idSession;
NSMutableArray *results = [[NSMutableArray alloc]init];
for (NSMutableDictionary *val in commandes) {
nbreSecEnCours= [val objectForKey:@NbreSecEnCours];
nbreSecEnCours = [ nbreSecEnCours stringByReplacingOccurrencesOfString:@\n withString:@""];
nbreSecEnCours = [ nbreSecEnCours stringByReplacingOccurrencesOfString:@\t withString:@""];
[results addObject: nbreSecEnCours];
NSLog(@NombreSession:%@",nbreSecEnCours);
idSession = [val objectForKey:@IdSession];
idSession = [idSession stringByReplacingOccurrencesOfString:@\n withString:@""];
idSession = [idSession stringByReplacingOccurrencesOfString:@\t withString:@""];
[results addObject:idSession];
}
//return nodeValue;
NSLog(@results= %@",results);
return results;
}
[/code]
J'ai aussi une deuxieme preoccupation , pour le projet sur lequel je suis entrain de travailler je dois parser un bon nombre de fichier car recuperer via une serveur Web distant j'aimerais savoir s'il est possible de faire un parseur gernerique pour ne pas avoir à creer autant de fichier pour parser que de fichier XML recu .
Merci d'avance .
Je suis Novice en Objective-C celà fait juste deux semaine que je connais le langage donc si mes questions vous semblent idiotes soyez indulgent
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Merci d'éditer ton message pour utiliser la balise "code" autour de ton code source (ou utiliser le bouton "< >" dans la barre d'outil au dessus de la zone de rédaction de ton message), histoire de le rendre un minimum lisible.
(Sinon personne ne va avoir envie de lire ton message ni donc de te répondre, ça serait dommage...)
J'essai de recuperer les attributs d'un element de mon fichier XML dont la structure est la suivante:
j'aimerais etre a mesure de recuper les valeur des attributs "NomAppli" "NameMach" "GuidSession".......
mais malheureusement je n'y parviens pas voici comment j'aborde le probleme en dessous le contenu de mon fichier pour parser
J'ai aussi une deuxieme preoccupation , pour le projet sur lequel je suis entrain de travailler je dois parser un bon nombre de fichier car recuperer via une serveur Web distant j'aimerais savoir s'il est possible de faire un parseur gernerique pour ne pas avoir à creer autant de fichier pour parser que de fichier XML recu .
Merci d'avance .
Je suis Novice en Objective-C celà fait juste deux semaine que je connais le langage donc si mes questions vous semblent idiotes soyez indulgent /apple.gif' class='bbc_emoticon' alt='' />
Exemple simplifié et non testé pour lister les attributs NomAppli :
Que faire ??
Si tu n'avais pas eu cette option tu aurais également pu spécifier que certains fichiers de ton projet n'utilisaient pas ARC.
Dans les paramètres de ton projet, dans Build Phases > Compile Sources de ta target, tu pouvais alors ajouter le flag pour ces fichiers afin de désactiver ARC lors de la compilation.
C'est la galère de faire ça, surtout avec le risque d'oublier un fichier par-ci-par-là ...
Utilisez les Workspaces pour ça, c'est vraiment fait pour ! Un Workspace qui contient :
Gros avantages de cette méthode (que j'ai présenté au dernier CocoaHeads #12 de Rennes) :
Les workspaces sont fait pour ça, Xcode est pensé pour ça, ça vous évite d'avoir un unique énorme fichier de projet, ça permet de séparer proprement votre code du code venant de l'extérieur... bref, je ne vois aucune raison de s'en priver à part si on aime se compliquer la vie.
Surtout a ne pas rater. http://vimeo.com/59334757 ( Presentation @Aligator).
Non ?
Merci d'avance
https://www.google.fr/search?q=nsxmlparser+tutorial
la doc : (qui pointe sur des exemple Apple)
https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html
et la méthode qui va bien :
et voici comment j'essai de recuperer tag et attribut
Mais avec mes dans la console avec les log un peu de partoout dans le code voilà ce que j'ai coe resultat
il y'a la tag "NSlookup" qui n'apparait pas je ne recupere qu'un seul idSession et de maniere dupliquer ce que je ne comprends pas
de facon general je n'arrive pas à recuperer mes deux instance de <idSession> ainsi que ces attribut dans le fichier XML
Merci d'avance
lorsque j'essai de suivre les manipulation sur la video dès la 6'50 je bug je ne sais pas si c'est un pb de version moi j'utilisa la version 4.5 de xcode . Quand il es demandé de cliquez glissez et déposé la librairie chez moi il ne me propose pas de creer automatique le workspace
/huh.gif' class='bbc_emoticon' alt='???' />??
apres quelque modification j'ai desormais le formatage que je voulais :
mais il me genere cette erreur que je ne comprends pas
Merci d'avance
le dictionnaire que j'essai de parcourir dans la boucle me renvoit au final "nil" et je ne comprend pas pourquoi
quelqu'un aurait-il une idée???
Merci d'avance
mais voilà ce que j'ai dans la console :
Justement c'est ce que je ne comprend pas au depart j'ai bien 2 puis j'ai un null et c'est la valeur qui est envoyé au tableau "results"
Et j'aimerais donc récupérer chacun des éléments de ce dictionnaires quelqu'un aurait il une idée pour faire celà ?? car coe vous l'avez vu j'ai essayé d'utiliser une boucle For pour le faire mais manifestement ca ne marche pas vu le resultat que j'obtiens.
dans ma variable "dico" que j'affiche j'ai ceci:
Mais comme resultat je n'obtient que:
au lieu d'avoir deux ligne conformement à mon dictionnaire le No1 ne s'affiche pas et je ne comprend pas pourquoi /huh.gif' class='bbc_emoticon' alt='???' />??
Il existe un bouton qui s'intitule "Modfier". Clique ..
edit : merci !!
Oui sinon tu pourrais aussi revoir la structure de ton XML. Si tu as la main dessus sa structure n'est pas figée si ?
la structure de mon XML est figé je n'ai pas la main dessus je tape sur un web Service distant et lui me retourne la trame XML que j'exploite voici sa structure
En fait au depart je récupère juste le le dictionnaire se trouvant à l'indice 0 du tableau afin de récupérer uniquement "NbreSecEnCours" voici ci dessous le code en esperant que les commentaires vous aides à comprendre comment je procède :
mais juste le deuxieme element No2 s'affiche pas le premier N01
et je ne comprends pas pourquoi /huh.gif' class='bbc_emoticon' alt='???' />? je ne sais pas si ma facon de parcourir le dictionnaire qui n'est pas bonne.
j'ai juste
au lieu d'avoir
/huh.gif' class='bbc_emoticon' alt='???' />???