AcrionScript 3 Lecture d'un fichier XML [Résolu]

Signaler
Messages postés
87
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
23 juillet 2009
-
Messages postés
87
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
23 juillet 2009
-
Bonjour,

J'essaie de faire une classe pour charger un fichier xml, qui comporte juste le chemin des images sur le serveur.

La lecture ce fait correctement, mais le problème est quand je veux récupérer le tableau avec ma liste d'images.
Par exemple avec la fonction "getItems" la liste d'image est vide.

Could you help me ? please.

Meilleurs salutation.

package {
import flash.net.URLLoader;
import flash.utils.Timer;
import flash.xml.XMLDocument;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.URLRequest;

public class ChargeXML {

protected var items : Array;

protected var loader : URLLoader;

protected var xml : XMLDocument;

protected var t:Timer = new Timer(5000);


public function ChargeXML(str : String) : void {
//craete teh urlloader object
this.loader = new URLLoader();

this.items = new Array();

//craete a new flash.xml xmlDocuments object
this.xml = new XMLDocument();

//ignore the white spaces in the file
xml.ignoreWhite = true;



//set the loaders listener function that gets the event when the xml is loaded
this.loader.addEventListener(Event.COMPLETE, XMLloaded);
this.loader.addEventListener(ProgressEvent.PROGRESS, avancement);

//load the xml file from it's location
this.loader.load(new URLRequest(str));		

trace(" Constructeur :" + this.items);
}

private function avancement(e:Event):void {
trace(e.target.bytesLoaded + " / "  + e.target.bytesTotal);	
}

private function XMLloaded(e:Event):void {
//parse the content and create a xml structure in the xmlDoscument
this.xml.parseXML(loader.data);

//firstchild represents first node, childNodes represent the nodes in the firstChild  
for(var i:int = 0; i < xml.firstChild.childNodes.length; i++){  

var o:Object = xml.firstChild.childNodes[i].attributes;  

//pushing the item to the items array holding the mobiles  
this.items.push(o.image);  
} 		

trace(" XMLloaded :" + this.items);

}

public function getItems():Array {
trace(" getItems :" + this.items);

return this.items;
}
}

}

8 réponses

Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Hello,

par exemple dans ton constructeur, tu peux spécifier un second paramètre :

var func : Function;

public function ChargeXML(str : String, pFunc : Function) : void 
{
    ...
    this.func = pFunc;
    ...
}


et ce paramètre sera la fonction de callback une fois le fichier chargé :

private function XMLloaded(e:Event):void {
    ...
    func();
}


Et donc lors de l'instanciation de la classe :

var items : ChargeXML = new ChargeXML('images.xml', callback);

function callback():void
{
    items.getItems();
}



A+

-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
416
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
2
Salut,
1- a quoi ressemble la structure du xml contenu dans le fichier?
2- a part quelques lignes de codes que tu devrais p-e modifier ou rajouter, la logique est juste.
3- je ne vois en aucun endroit un appel a la fonction getItems(), qui pourtant est bien ecrite.

montre nous en plus si tu veux bien.
Bonne continuation.

http://liveplayaz.com
je suis heureux de faire partie d'une grande famille ...!
Messages postés
87
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
23 juillet 2009

Salut,

Imaginons dans mon main.

  //code de main exemple.
  trace("before create object");
  var items : ChargeXML = new ChargeXML('images.xml');
  trace("after create object");

  trace(items.getItems());



ce que je reçois dans la fenêtre système.
Avant Creat object
 Constructeur :
apres Create object
 getItems :

259 / 259
 XMLloaded :imgs/1.jpg,imgs/2.jpg,imgs/3.jpg,imgs/4.jpg,imgs/5.jpg




<?xml version="1.0" encoding="utf-8" ?>
<data>





</data>


J'arrive à lire le contenu de mon xml. Ce que je ne comprends pas c'est pourquoi ma fonction "getItems" est exécuté avant le tracer qui ce trouve dans la fonction "XMLloaded"

Je ne sais si j'ai été claire.

Meilleurs salutation…
Messages postés
416
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
2
Salut,

C'est parce le chargement du fichier xml est fait de maniere asynchrone. Ce qui veut ire que flash initie le chargement du fichier et le confie a un thread, en attendant que le fichier soit charge (et que ta fonction soit notifiee) , il execute les autres lignes de codes. Voila pkoi ton tableau est vide lorsque ta fonctions est appelee : parce que ton fichier n'est pas encore charge et traite.

Bonne continuation.
http://liveplayaz.com
je suis heureux de faire partie d'une grande famille ...!
Messages postés
87
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
23 juillet 2009

Salut,

Merci pour ta réponse, mais comment je pourrais éviter ça.

Meilleurs salutation.
Messages postés
416
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
2
Salut,

tu as deja implemente la solution toi-meme: la fonction XMLloaded, qui est appelee lors du chargement complet du fichier. Tu peux recommencer une sequence d'actions synchrones a partir de la.

Bonne continuation.

http://liveplayaz.com
je suis heureux de faire partie d'une grande famille ...!
Messages postés
87
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
23 juillet 2009

Salut,

Je ne vois pas trop ce que tu veux dire.

Salutation
Messages postés
87
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
23 juillet 2009

Merci,
Ca fonctionne trés bien merci.

Meilleurs salutations.