xml a plusieurs niveaux

xml a plusieurs niveaux - Flash/ActionScript - Programmation

Marsh Posté le 30-03-2006 à 00:34:48    

bonsoir,
 
alors voila, j'ai un xml avec plusieurs niveaux parents/parents/enfants :

Code :
  1. - <test>
  2. - <show>
  3.   <img nom="mouettes.jpg" dossier="test/show" />
  4.   <img nom="erdre-1.jpg" dossier="test/show" />
  5.   <img nom="erdre-2.jpg" dossier="test/show" />
  6.   <img nom="bateaux.jpg" dossier="test/show" />
  7.   <img nom="goutte4.jpg" dossier="test/show" />
  8.   </show>
  9. - <présentation>
  10.   <img nom="mouettes.jpg" dossier="test/présentation" />
  11.   <img nom="erdre-1.jpg" dossier="test/présentation" />
  12.   <img nom="erdre-2.jpg" dossier="test/présentation" />
  13.   <img nom="bateaux.jpg" dossier="test/présentation" />
  14.   <img nom="goutte4.jpg" dossier="test/présentation" />
  15.   </présentation>
  16.   </test>


 
et dans mon fla, je mets ça :

Code :
  1. var getXml = monXml.firstChild.firstChild.childNodes;
  2. var nb = getXml.length;
  3. for (q=0; q<nb; q++) {
  4.              [...]
  5. _root.menuG["date"+q] = getXml[q].attributes.nom;
  6. }


 
donc j'arrive a avoir le contenu de <show>
 
mais en théorie, ça devrait etre plus propre et ça devrait lister le contenu de <show> ET de <présentation> avec ça:
 

Code :
  1. q = 0;
  2. for (var aNode:XMLNode = monXml.firstChild.firstChild; aNode != null; aNode=aNode.nextSibling) {
  3. for (var bNode:XMLNode = monXml.firstChild.firstChild.firstChild; bNode != null; bNode=bNode.nextSibling) {
  4.                          [...]
  5.  _root.menuG["node"+q] = monXml.firstChild.firstChild.attributes.nom;
  6.  q++;
  7. }
  8. }


 
mais ça marche pas. alors aidez moi siouplé ! comment faire pour lister TOUS les enfants quelque soit les parents ?
 
d'avance merci


---------------
c'est au pied du mur que l'on voit le mieux le mur !
Reply

Marsh Posté le 30-03-2006 à 00:34:48   

Reply

Marsh Posté le 30-03-2006 à 08:11:53    

fait des boucles while imbriqué (une par niveau de profondeur) au lieu de boucle for basé sur la longueur du noeud courant...


---------------
D3
Reply

Marsh Posté le 31-03-2006 à 10:56:59    

merci Mechkurt mais ça ne fonctionne pas mieux.
je suis quasiment sur que je me plante au niveau du nombre de firstchild
 
pour l'instant j'en suis là:

Code :
  1. var preXml = monXml.firstChild.firstChild.childNodes;
  2. var lx = preXml.length;
  3. while (r<lx) {
  4. //boucle enfants
  5. var getXml = preXml.firstChild.childNodes;
  6. var nb = getXml.length;
  7. while (q<nb) {
  8.  _root.menuG.createTextField("nom"+q, q+10, 10, q*30+20, 120, 20);
  9.  _root.menuG["nom"+q].type = "dynamic";
  10.  _root.menuG["nom"+q].variable = "nom"+q;
  11.  _root.menuG["nom"+q] = getXml[q].nodeName;
  12.  _root.menuG.createTextField("date"+q, q+100, 150, q*30+20, 120, 20);
  13.  _root.menuG["date"+q].type = "dynamic";
  14.  _root.menuG["date"+q].variable = "date"+q;
  15.  _root.menuG["date"+q] = getXml[q].attributes.nom;
  16.  q++;
  17. }
  18. r++;
  19. }
  20. stop();


 
r et q sont definit à 0 en image 1
 
question subsidiaire pour une autre approche, y a t'il moyen d'appeller un node par son nom : ici "show" ou "présentation" au lieu de firstchild (qui d'ailleurs n'appelle que le 1er...)
 
du genre : monXml.test.show.childNodes
 
merci d'avance


---------------
c'est au pied du mur que l'on voit le mieux le mur !
Reply

Marsh Posté le 31-03-2006 à 11:13:14    

dans ton cas je ferais une premiere boucle while avec hasChildNodes() et une deuxieme avec while (brique_xml.nodeName == "img" ) ...
 
pour

Citation :

je suis quasiment sur que je me plante au niveau du nombre de firstchild


fait un trace(preXml); et tu verras bien ce qu'il en sort


---------------
D3
Reply

Marsh Posté le 03-04-2006 à 22:01:31    

merci mechkurt, en empilant dans le bon sens et avec la visualisation directe grace aux trace("" ), j'ai réussi... je progresse donc lentement dans mon projet.
merci


---------------
c'est au pied du mur que l'on voit le mieux le mur !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed