Classe pour charger des xml

projer Messages postés 112 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 17 janvier 2015 - 2 mars 2010 à 17:50
Twinspirit Messages postés 58 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 7 mai 2012 - 5 mars 2010 à 20:16
Bonjour, j'essaye depuis ce matin de faire une classe qui puisse charger un XML et en renvoyer le contenu.

Dans mon fla, j'appelle la classe comme celà :

var donneesXml:XMLLoader=new XMLLoader("xml/petit.xml");

Ensuite ma classe (nom du fichier: XMLLoader.as):

package{
import flash.display.*;
import flash.xml.*;
import flash.net.*;
import flash.events.*;

public class XMLLoader{

var chargeur:URLLoader=new URLLoader();
var urlXML:URLRequest=new URLRequest("xml/monFichier.xml");
var fichierXML:XML;

chargeur.load(urlXML);
chargeur.addEventListener(Event.COMPLETE, onComplete);

public function onComplete(evt:Event){
fichierXML=new XML(chargeur.data);
return fichierXML;
}
}
}

------------------------------------

Tout ce que j'obtiends c'est un message d'erreur du compilateur :
1120: Accès à la propriété non définie chargeur. - chargeur.load(urlXML);
1120: Accès à la propriété non définie urlXML. chargeur.load(urlXML);
1120: Accès à la propriété non définie chargeur. - chargeur.addEventListener(Event.COMPLETE, onComplete);
1120: Accès à la propriété non définie onComplete. - chargeur.addEventListener(Event.COMPLETE, onComplete);

Je ne comprends pas bien, je pense avoir tout bien déclaré.

Ensuite je ne sais pas comment récupérer le nom du fichier XML dans la classe. Pour le return, je ne suis pas sûr non plus que ça fonctionne vu que j'ai ce message d'erreur lors de la compilation.

Merci d'avance

--------------------------------------------------------

http://www.projer.fr - dev web
http://www.lysdesign.fr - DA print / web - Illustratrice

6 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 11
2 mars 2010 à 20:55
bonsoir, rien de plus normal : tu donnes des instructions dans le corps même de la classe, sans support de fonction.
De plus, tu n'as pas de fonction d'instanciation alors que ta classe n'est pas statique ...

Donc soit tu fais une classe statique, soit tu crées une instance de ta classe. Mais dans les deux cas, une fonction "load" où tu envoies le nom de ton fichier en paramètre est obligatoire pour fonctionner.

Ensuite, en AS3, tu es obligé de précisé le type de la variable renvoyée dans une fonction se finissant par un "return".

Peg'
0
projer Messages postés 112 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 17 janvier 2015
5 mars 2010 à 11:28
J'ai cherché un peu partout sur le net, j'ai réussi à comprendre pas mal d'autres choses mais ça ne fonctionne toujours pas malheureusement...

mon.fla :

var classeXml:XMLLoader=new XMLLoader("xml/petit.xml");
var donneesXML:XML=XMLLoader.envoiXML();
trace(donneesXML)

mon .as :

package{
import flash.display.*;
import flash.xml.*;
import flash.net.*;
import flash.events.*;

public class XMLLoader{
private var chargeur:URLLoader;
private var urlXML:URLRequest;
public var fichierXML:XML;

public function XMLLoader(urlEnvoye):void{
chargeur=new URLLoader();
urlXML=new URLRequest(urlEnvoye);
chargeur.load(urlXML);
chargeur.addEventListener(Event.COMPLETE, onComplete);
}

private function onComplete(evt:Event):void{
fichierXML=new XML(chargeur.data);
envoiXML();
}

private function envoiXML():XML{
return fichierXML;
}
}
}

Et là en gros il me dit :
1061: Appel à la méthode envoiXML peut-être non définie, via la référence de type static Class.

Et je ne comprends pas ce qui cloche :)

Merci d'avance
0
projer Messages postés 112 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 17 janvier 2015
5 mars 2010 à 11:29
Je précise quand même que c'est la première classe que j'essaye de faire.


--------------------------------------------------------

http://www.projer.fr - dev web
http://www.lysdesign.fr - DA print / web - Illustratrice
0
Twinspirit Messages postés 58 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 7 mai 2012
5 mars 2010 à 18:16
Il me semble que tu essaie d'appeler une méthode privée de l'extérieur d'une classe.

function envoiXML() doit être "public" au lieu de "private".

TwFlash - Développeur ActionScript3 freelance.
Mon blog : Twin Flash Blog
Mon site : TwFlash
0

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

Posez votre question
projer Messages postés 112 Date d'inscription lundi 6 avril 2009 Statut Membre Dernière intervention 17 janvier 2015
5 mars 2010 à 19:39
oui en effet, mais même en changeant, ça fonctionne pas :/


--------------------------------------------------------

http://www.projer.fr - dev web
http://www.lysdesign.fr - DA print / web - Illustratrice
0
Twinspirit Messages postés 58 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 7 mai 2012
5 mars 2010 à 20:16
Ah oui, j'avais pas vu, mais c'est dans la procédure qu'il y a un problème !

La bonne procédure:

- On crée une instance de XMLLoader;
- On lui demande de charger le xml;
- XMLLoader émet un évènement "chargement terminé
- Ton script dans l'image, lui, écoute cet évènement.
- Dés qu'il le reçoit, il peut demander le XML.

Ton problème, c'est que envoiXML() est appelé deux fois : quand le XML est chargé (mais le résultat n'est pas récupéré...) et dans l'image, mais l'appel vient avant que le XML soit chargé et disponible, donc, pas de resultat...

Juste pour t'expliquer, tu pourrais envisager de mettre un timer à une ou deux secondes, histoire de délayer le temps que le XML soi disponible, mais niveau code, c'est très moche. Ne le fait pas.

Là, je vais manger, mais si tu patientes un peu, je te donne un exemple de code avec l'évènement un peu plus tard dans la soirée.



TwFlash - Développeur ActionScript3 freelance.
Mon blog : Twin Flash Blog
Mon site : TwFlash
0