AcrionScript 3 Lecture d'un fichier XML

Résolu
cs_nuns Messages postés 87 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 23 juillet 2009 - 21 juil. 2009 à 11:54
cs_nuns Messages postés 87 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 23 juillet 2009 - 23 juil. 2009 à 12:27
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

Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
23 juil. 2009 à 09:08
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)
3
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
21 juil. 2009 à 16:17
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 ...!
0
cs_nuns Messages postés 87 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 23 juillet 2009
21 juil. 2009 à 17:03
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…
0
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
22 juil. 2009 à 17:20
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 ...!
0

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

Posez votre question
cs_nuns Messages postés 87 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 23 juillet 2009
22 juil. 2009 à 21:46
Salut,

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

Meilleurs salutation.
0
nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
23 juil. 2009 à 00:31
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 ...!
0
cs_nuns Messages postés 87 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 23 juillet 2009
23 juil. 2009 à 08:34
Salut,

Je ne vois pas trop ce que tu veux dire.

Salutation
0
cs_nuns Messages postés 87 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 23 juillet 2009
23 juil. 2009 à 12:27
Merci,
Ca fonctionne trés bien merci.

Meilleurs salutations.
0
Rejoignez-nous