Remplir un tableau avec du xml

Résolu
Kangouroops Messages postés 21 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 15 mars 2010 - 3 nov. 2009 à 22:24
Kangouroops Messages postés 21 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 15 mars 2010 - 4 nov. 2009 à 01:46
Bonjour tout le monde,
Me revoilà avec une nouvelle question.
Pour repréciser les choses je débute complètement en programmation, du coup je regarde des codes un peu partout pour essayer de me faire mes codes.
Bref,
Je suis entrain de faire un générateur d'avatar, et j'aimerai bien charger les images dynamiquement.

Voici le bout de code qui nous intéresse:
function chargementComplet(pEvt:Event):void {   // on récupère notre xml
var parties:XML = new XML( pEvt.target.data );//la classe XML est une classe native de Flash, on la trouve dans le package Top Level.
var personne:XMLList = parties.elements(); //le document XML est constitué d'une liste d'éléments XML, en l'occurence ici, une liste de personnes
for each(var image:XML in personne.(@sexe=="F").yeux){//pour chaque noeud enfants dans la liste des personnes
tableau_yeux.push(image);
trace (tableau_yeux[0]);
}
}


Le trace affiche cela:
<yeux>
  
  
  
  
  
  
  
  
</yeux>



Or, j'imaginais qu'avec ce code, il créerai une nouvelle entrée dans le tableau pour chaque image du fichier xml, malheureusement ce n'est pas le cas, il remplis la case 0 avec toutes les images.

Que pourrais-je faire pour remédier à cela ?
Pour ma part j'y suis depuis plusieurs jours et je n'arrive toujours à rien.
Donc je m'en remets à vous, par avance un grand merci à celui/celle/ceux qui m'aideront :)

11 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
4 nov. 2009 à 01:08
ok, j'ai pigé : tu appelles le xml "personne" or, c'est aussi le nom du noeud .. et donc met un conflit !

// chargement terminé du fichier xml
function chargementComplet(pEvt:Event):void {
var xml:XML=new XML(chargementXML.data);
for each (var img:XML in xml.personne.(@sexe=="M").yeux.image) {
tableau_yeux.push(img.@src);
}
trace(tableau_yeux);
}


Peg'
3
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
3 nov. 2009 à 22:44
Bonsoir,

pourquoi récupérer les "elements" de ta XMLList ?
tu peux déjé récupérer les infos de dont tu as besoin dans ta XMLList dés le départ sans te prendre la tête.

Par contre, je n'ai pas bien saisis ta façon de placer les données dans le XML ... serait-il possible de l'avoir ?

Peg'
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
3 nov. 2009 à 22:46
Hello,

et si tu change ton code par

function chargementComplet(pEvt:Event):void
{
var parties:XML = new XML( pEvt.target.data );
var yeuxNode:XMLList = parties.(@sexe=="F").yeux;
for each(var image:XML in yeuxNode)
{
     tableau_yeux.push(image);
     trace (tableau_yeux[0]);
}
}



A+

-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
0
Kangouroops Messages postés 21 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 15 mars 2010
3 nov. 2009 à 22:56
Salut vous deux,
Merci de vous intéresser à mon problème.
Déjà pour commencer, voici mon xml:
<?xml version="1.0" encoding="iso-8859-1"?> 


<cheveux>
</cheveux>
<yeux>








</yeux>


<tenue>
</tenue>



<cheveux>
</cheveux>
<yeux>








</yeux>


<tenue>
</tenue>


<fond>
</fond>


pourquoi récupérer les "elements" de ta XMLList ?
tu peux déjé récupérer les infos de dont tu as besoin dans ta XMLList dés le départ sans te prendre la tête.


Huhu, en fait, comme je ne comprends pas vraiment ce que je fais, et que j'ai repris ce code d'un autre site, je ne l'ai pas enlevé, j'ai juste modifié les noms pour qu'ils correspondent aux miens.

Orange73>
J'ai essayé de remplacer mon code par le tien, mais flash me retourne cette erreur:
ReferenceError: Error #1065: La variable @sexe n'est pas définie.
at essai_02_fla::MainTimeline/chargementComplet()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()


Voilou, j'espère qu'avec ces quelques données complémentaires j'aurai pu vous éclairer sur la nature du problème.
Par avance, je vous remercie.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
3 nov. 2009 à 23:03
Avec le xml c'est mieux ;-)

var yeuxNode:XMLList = personne.(@sexe=="F").yeux;




-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
0
Kangouroops Messages postés 21 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 15 mars 2010
3 nov. 2009 à 23:17
Avec le xml c'est mieux ;-)


Huhu, je confirme, j'aurai du l'envoyer dès le départ.
Alors quand je modifie avec ce que tu me donnes, j'ai donc ce code là:

function chargementComplet(pEvt:Event):void
{
var personne:XML = new XML( pEvt.target.data );
var yeuxNode:XMLList = personne.(@sexe=="M").yeux;
for each(var image:XML in yeuxNode)
{
     tableau_yeux.push(image);
     trace (tableau_yeux[0]);
}
}


Et il me renvoie la même erreur que tout à l'heure, me disant que la variable @sexe n'est pas définie.

ReferenceError: Error #1065: La variable @sexe n'est pas définie.
at essai_02_fla::MainTimeline/chargementComplet()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()


Résultat des courses, je suis toujours dans le brouillard lol.
Merci de t'intéresser à mon problème en tout cas, c'est vraiment sympa :)
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
3 nov. 2009 à 23:55
for each(var img:XML in personne.(@sexe=="M").yeux.image) {
     tableau_yeux.push(img.@src);
}
trace (tableau_yeux);


normalement, ça doit marcher.

Peg'
0
Kangouroops Messages postés 21 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 15 mars 2010
4 nov. 2009 à 00:01
Salut, merci pour ta réponse,
Je vois que ton code s'attaque directement à l'adresse de l'image, c'est une bonne chose parce que je n'aurai pas su faire je pense.
Par contre, j'ai toujours cette même erreur:

ReferenceError: Error #1065: La variable @sexe n'est pas définie.


Est-ce qu'il faut que je définisse une variable sexe et que j'indique à quoi elle correspond parce qu'il ne le sait pas tout seul ?

Est-ce que poster un zip contenant le .fla, le .xml et le dossier avec les images serait un plus ?
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
4 nov. 2009 à 00:13
ben ton XML seul suffirait, mais pour mio il est bon au départ ... Utilises-tu une variable dont le nom est "sexe" dans ton code ?

Peg'
0
Kangouroops Messages postés 21 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 15 mars 2010
4 nov. 2009 à 00:16
Le xml, je ne l'ai pas modifié depuis que je l'ai posté plus haut, donc il n'a pas changé.
Dans mon code je n'utilise aucune variable "sexe".

Voici le code complet:
stop();
//btn_yeux_droite.addEventListener(MouseEvent.CLICK, relacherYeuxDroite);

import fl.containers.UILoader; 

var tableau_yeux:Array = new Array();

var aLoader:UILoader = new UILoader(); 
aLoader.source = tableau_yeux[0]; 
aLoader.scaleContent = false; 
addChild(aLoader); 
aLoader.autoLoad = true;
 
var chargementXML:URLLoader = new URLLoader();// objet de chargement
var fichier:URLRequest = new URLRequest("galerie.xml");// url du fichier chargé
chargementXML.addEventListener( Event.COMPLETE, chargementComplet );
chargementXML.load( fichier );
 // chargement terminé du fichier xml
function chargementComplet(pEvt:Event):void
{
var personne:XML = new XML( pEvt.target.data );
var yeuxNode:XMLList = personne.(@sexe=="M").yeux;
/*for each(var image:XML in yeuxNode)
{
     tableau_yeux.push(image);
     trace (tableau_yeux[0]);
}*/
for each(var img:XML in personne.(@sexe=="M").yeux.image) {
     tableau_yeux.push(img.@src);
}
trace (tableau_yeux);
}


Il y a peut-être quelque vieux trucs qui trainent, je fais beaucoup d'essais différents pour essayer d'avoir quelque chose qui marche, et ensuite je cleanerai le tout.
0
Kangouroops Messages postés 21 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 15 mars 2010
4 nov. 2009 à 01:46
Super c'est nickel.
Ben vraiment un énorme merci à vous deux, vous m'enlevez une épine du pied grosse comme une poutre.
Merci, merci, merci :)
0
Rejoignez-nous