Impossible d'afficher des données XML

Otakumaster Messages postés 3 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 16 mai 2012 - 14 avril 2009 à 17:33
Otakumaster Messages postés 3 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 16 mai 2012 - 16 avril 2009 à 14:11
Bonjour,
cela fait 3 jours que j'essaye d'afficher les données d'un xml dans Flash en AS3,
voici le XML en question:

<?xml version="1.0" encoding="iso-8859-1" ?>
<racine>
<client nom="3M" logo="images//logo_3m.jpg" />
<client nom="Accor" logo="images//logo_accor.jpg" />
<client nom="AGF" logo="images//logo_agf.jpg" />
<client nom="Air Liquide" logo="images//logo_air_liquide.jpg" />
</racine>

et mon actionscript que j'ai mis dans mon anim fla:

fscommand("fullscreen", "true");
stop();

// nous importons les classes necessaires :
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;

// nous déclarons un objet URLLoader :
var chargeur:URLLoader = new URLLoader ();

// nous crééons un objet URLRequest qui contient l'url du fichier :
var adresse:URLRequest = new URLRequest ("data.xml");

// nous définissons le format du fichier chargé :
var format = URLLoaderDataFormat.XML;
chargeur.dataFormat = format;

// nous lançons le chargement du fichier, en indiquant l'adresse de celui ci par l'objet URLRequest :
chargeur.load(adresse);

// définition des évenements de l'objet chargeur
chargeur.addEventListener(Event.COMPLETE, finDuChargement);
chargeur.addEventListener(ProgressEvent.PROGRESS, avancement);
chargeur.addEventListener(IOErrorEvent.IO_ERROR, indiquerErreur);

// définition de la fonction éxecutée par l'évenement COMPLETE :
// ( déclenchée lorsque le chargement se termine )
var clients:XML = new XML(event.target.data);
for each (var property:XML in clients.client){
var myText:TextField = new TextField();
myText.y = 110;
myText.x = 50;
myText.width = 200;
myText.height = 200;
myText.text = (property[0].@["nom"]);
addChild(myText);
}

// définition de la fonction éxecutée par l'évenement PROGRESS :
// déclenchée à chaque avancement du chargement )
function avancement( event:Event) {
trace(event.bytesLoaded+" chargés sur "+event.bytesTotal);
}

// fonction indiquant si une erreur de chargmement survient :
function indiquerErreur( event:Event ) {
trace(event);
}

Le but est d'afficher chaque nom d'entreprise dans un clip, ainsi que son logo.
J'ai ici tenté d'afficher juste les noms mais ça ne fonctionne pas et je pense avoir fait
tous les tutos trouvables avec Google, sans y arriver...
Je remercie d'avance les bonnes âmes qui pourront me donner un coup de main.

3 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
14 avril 2009 à 17:55
Bonjour,

"property[0].@["nom"]" n'est pas de l'e4x correcte.
Si tu cherches à ressortir l'attribut "nom", il faut écrire : property[0].@nom;

Ensuite, je te conseille de passer par un XMLList et de récupérer la longueur de celui-ci pour faire une boucle "for" dessus, au lieu d'un "for each" dont tu ne maîtrises pas le résultat.

Peg'
0
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
15 avril 2009 à 22:13
Salut,

    tout est correct jusqu'ici sauf que je ne vois pas la fonction finDuChargement que j'ecrirais comme suit:

 function finDuChargement(event:Event):void
{
         var urlloader:URLLoader = event.target as URLLoader;
         urlloader.removeEventListener(Event.COMPLETE,finDuChargement);
         urlloader.removeEventListener(ProgressEvent.PROGRESS,finDuChargement);
         urlloader.removeEventListener(IOErrorEvent.IO_ERROR,finDuChargement);
         var reponse:String = urlloader.data as String;
  
         var xml:XMLDocument = new XMLDocument;
         xml.ignoreWhite = true;
         xml.parseXML(reponse);
        var node:XMLNode = xml.firstChild;
        if(node==null)return;
        while(node.nextSibling!=null)node = node.nextSibling;

      //a ce stade-ci en theorie tu as node.nodeName = racine
     node = node.firstChild;// premier noeud client     var field:TextField null, y:Number 0.0;
    while(node!=null)
    {
             field = new TextField;
             field.autoSize = "left";
             field.text = String(node.attributes.nom);
             field.x = 50.0;
             field.y = y;
             y += field.height + 2.0;
             addChild(field);
             node = node.nextSibling;
     }
     field = null;
     node = null;
     xml = null;
}

Bonne continuation
http://liveplayaz.com

je suis heureux de faire partie d'une grande famille ...!
0
Otakumaster Messages postés 3 Date d'inscription vendredi 19 décembre 2008 Statut Membre Dernière intervention 16 mai 2012
16 avril 2009 à 14:11
Je vous remercie pour votre aide, je suis finalement parvenu à un code fonctionnel, que voici si cela peut aider quelqu'un.
Pour résumer:
1 - je charge un PHP qui génère (ou met à jour) un XML à partir d'une base MySQL
2 - je lis les données du XML
3 - j'affiche les images grâce aux liens du XML

stop();

// nous importons les classes necessaires :
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;

// nous déclarons un objet URLLoader :
var PHPloader:URLLoader = new URLLoader ();
// nous créons un objet URLRequest qui contient l'url du fichier :
var PHPadresse:URLRequest = new URLRequest ("loader.php");
PHPadresse.method = URLRequestMethod.POST;
// nous définissons le format du fichier chargé :
var PHPformat = URLLoaderDataFormat.BINARY;
PHPloader.dataFormat = PHPformat;
// nous lançons le chargement du fichier, en indiquant l'adresse de celui ci par l'objet URLRequest :
PHPloader.load(PHPadresse);

// nous déclarons un objet URLLoader :
var chargeur:URLLoader = new URLLoader ();
// nous créons un objet URLRequest qui contient l'url du fichier :
var adresse:URLRequest = new URLRequest ("data.xml");
// nous définissons le format du fichier chargé :
var format = URLLoaderDataFormat.TEXT;
chargeur.dataFormat = format;
// nous lançons le chargement du fichier, en indiquant l'adresse de celui ci par l'objet URLRequest :
chargeur.load(adresse);

// définition des évenements de l'objet chargeur
chargeur.addEventListener(Event.COMPLETE, finDuChargement);
chargeur.addEventListener(IOErrorEvent.IO_ERROR, indiquerErreur);

// définition de la fonction exécutée par l'évenement COMPLETE :
// ( déclenchée lorsque le chargement se termine )
function finDuChargement ( event:Event ) {
    var contenu:XML = new XML(event.target.data);
    var mon_y = 115;
    var mon_x = 53;
    var decal = 0;
   
    var results:XMLList = contenu.client;
    var i = 0;
    var j = 0;
   
    for each (var item:XML in results) {
       
        trace("i: "+i);
        trace("j: "+j);

        var myLoader:Loader = new Loader();
        myLoader.load(new URLRequest(item.@logo));
        addChild(myLoader);
       
        trace(myLoader.width);
       
        myLoader.x = mon_x + (i *(94 + 26));
        myLoader.y = mon_y + (94 * j + 26 * j);
        i++;        if (i 10) j (j+1) % 10;
        i %= 10;
    }
   
}

// fonction indiquant si une erreur de chargmement survient :
function indiquerErreur( event:Event ) {
    trace(event);
}
0
Rejoignez-nous