Noeud dynamique xml [Résolu]

Messages postés
77
Date d'inscription
mardi 7 avril 2009
Dernière intervention
18 mars 2010
- 16 mars 2010 à 10:35 - Dernière réponse :
Messages postés
77
Date d'inscription
mardi 7 avril 2009
Dernière intervention
18 mars 2010
- 18 mars 2010 à 10:21
Bonjour,

je souhaite récupérer des données d'un fichier xml en AS3 dont les noeuds ont des noms différents.
voici mon fichier xml :

<?xml version="1.0" encoding="UTF-8" ?>


<nom><![CDATA[1]]></nom>
<src>gedia_2.jpg</src>


<nom><![CDATA[2]]></nom>
<src>poutret_1.jpg</src>


<nom><![CDATA[3]]></nom>
<src>gedia_6.jpg</src>


<nom><![CDATA[4]]></nom>
<src>ot_1.jpg</src>


<nom><![CDATA[5]]></nom>
<src>gedia_5.jpg</src>

<oiseau>
<nom><![CDATA[1]]></nom>
<src>cmbp_1.jpg</src>
</oiseau>
<oiseau>
<nom><![CDATA[2]]></nom>
<src>gedia_4.jpg</src>
</oiseau>
<oiseau>
<nom><![CDATA[3]]></nom>
<src>gedia_2.jpg</src>
</oiseau>
<vehicule>
<nom><![CDATA[1]]></nom>
<src>terriat_1.jpg</src>
</vehicule>



je voudrais par exemple n'afficher que les images de la catégorie instru,
pour cela j'ai récupérer un code flash qui fonctionne très bien avec des numéros, mais vue que le fichiers xml sera généré automatiquement en php et que des catégories pourront y être ajouter cela ne fonctionnera pas avec les numéro, mais impossible pour moi de le faire avec des noms :

stage.scaleMode = StageScaleMode.NO_SCALE;

import caurina.transitions.*;
import fl.transitions.easing.*;
import fl.transitions.*;



var lesDonneesXML:XML;
var chargeur:URLLoader = new URLLoader();
var adresseFichier:URLRequest = new URLRequest("xml/agence.xml");
var style : TextFormat = new TextFormat();
var texteErreur : TextField = new TextField ();
var container:Sprite = new Sprite();
var nouvelleCouleur:ColorTransform = new ColorTransform();
nouvelleCouleur.color = 0x009EE0;
var nouvelleCouleur2:ColorTransform = new ColorTransform();
nouvelleCouleur2.color = 0x333333;

var comptDiapo:Number ;
comptDiapo = Number(loaderInfo.parameters.maVar3)|| 0;

var portfolio:Number ;
portfolio = Number(loaderInfo.parameters.maVar4)|| 0;


style.size=10;
style.font="Verdana";
style.color=0xffffff;

texteErreur.x = 60;
texteErreur.y = 190;
texteErreur.width = 200;
texteErreur.selectable = false;
texteErreur.text="Erreur lors du chargement...";
texteErreur.embedFonts = true
texteErreur.setTextFormat(style);


chargeur.load(adresseFichier);
chargeur.addEventListener(Event.COMPLETE, chargementTermine);
chargeur.addEventListener(IOErrorEvent.IO_ERROR, indiquerErreur);


function indiquerErreur (erreur:Event ):void
{
addChild(texteErreur);
}



function chargementTermine(evt:Event)
{
lesDonneesXML = new XML(chargeur.data);

creationConteneurs();
affichageBouton();
}

function creationConteneurs():void

{

addChild(container);
container.addChild(new MovieClip()); container.addChild(new MovieClip());
container.x = 0;
container.y = 0;
var l:Loader=new Loader();
l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,chargementEnCours);
l.contentLoaderInfo.addEventListener(Event.COMPLETE,transition);
l.load(new URLRequest(lesDonneesXML.portfolio[portfolio].clients.adresse[comptDiapo]));
container.addChildAt(l,2);


}

function afficherConteneurs(evt=0)

{

if (!contains (jauge)){
evt.currentTarget.fond.transform.colorTransform = nouvelleCouleur;

var l:Loader=new Loader();
l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,chargementEnCours);
l.contentLoaderInfo.addEventListener(Event.COMPLETE,transition);
l.load(new URLRequest(lesDonneesXML.portfolio[portfolio].clients.adresse[(evt.currentTarget.name)]));
container.swapChildrenAt(1,2);
container.removeChildAt(2);
container.addChildAt(l,2);}

}




function chargementEnCours(evt:ProgressEvent)

{
addChild(jauge);
var pct:int=(evt.bytesLoaded/evt.bytesTotal)*100;
jauge.bar.gotoAndStop(pct);

}

function afficherMain(evt:MouseEvent)

{
//Mouse.cursor = MouseCursor.BUTTON;
evt.currentTarget.fond.transform.colorTransform = nouvelleCouleur;


}
function cacherMain(evt:MouseEvent)

{
//Mouse.cursor = MouseCursor.ARROW;
evt.currentTarget.fond.transform.colorTransform = nouvelleCouleur2;
evt.currentTarget.fond.alpha=0.5;
}

function affichageBouton ()
{
var n :Number = lesDonneesXML.portfolio[portfolio].children().length();
var ecart:Number = 8 ;
var totalWidth:Number = 605 -((n+1)*25) ;




for(var i :Number =0; i<=n-1; i++)
{

var boutonImage : MovieClip = new bouton();
boutonImage.name=""+i;
totalWidth += boutonImage.width + ecart;
boutonImage.x = totalWidth;

boutonImage.y = 385;

addChild(boutonImage);
var bTnom:TextField = new TextField();
boutonImage.bTnom.text=(lesDonneesXML.portfolio[0].clients.nom[i]);
boutonImage.bTnom.embedFonts = true
boutonImage.bTnom.selectable = false;
boutonImage.bTnom.setTextFormat(style);
boutonImage.addEventListener(MouseEvent.MOUSE_OVER,afficherMain);
boutonImage.addEventListener(MouseEvent.MOUSE_OUT,cacherMain);
boutonImage.addEventListener(MouseEvent.CLICK,afficherConteneurs);




}

}

function transition(evt:Event):void

{

if (contains (jauge))removeChild (jauge);
container.getChildAt(2).alpha=0;
Tweener.addTween(container.getChildAt(2),{alpha:1, time:2, transition:"alpha"});
System.gc();


}


je précise que les variables maVar3 et maVar4 sont initialisé lors de l'appel du swf dans la page php afin de faire appelle à la bonne galerie sur la page.

Merci d'avance pour votre aide
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
77
Date d'inscription
mardi 7 avril 2009
Dernière intervention
18 mars 2010
- 18 mars 2010 à 10:21
3
Merci
Ok, j'ai trouvé où était le souci:
j'ai mis des quotes dans ma flash var alors qu'il en faut pas même si c'est un string.

Merci pour votre aide

Merci loblobloblob 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de loblobloblob
Messages postés
6161
Date d'inscription
dimanche 21 décembre 2003
Dernière intervention
4 septembre 2013
- 16 mars 2010 à 13:05
0
Merci
Bonjour, je te conseille de lire la partie Utilisation de XML de la doc en ligne de flash.

Tu devrais y apprendre tout ce dont tu as besoin (et même plus) pour régler simplement ton soucis.

Bonne lecture ...

Peg'
Commenter la réponse de pegase31
Messages postés
77
Date d'inscription
mardi 7 avril 2009
Dernière intervention
18 mars 2010
- 16 mars 2010 à 13:46
0
Merci
Merci pour ton aide mais, j'ai rien trouvé concernant mon probléme, je n'arrive toujours pas à accéder à mes catégorie (instru, vehicule ...) dynamiquement, car le but est de pouvoir ajouter ou supprimer des catégories suivant les besoins du site.

j'ai essayé avec les méthode name(), valueOf(), localName(), mais cela n'a rien donnée et il me sort souvent cette erreur : TypeError: Error #2007: Le paramètre url ne doit pas être nul.

je comprend pas pourquoi, car j'ai n'ai pas rentré de variable nulle

stage.scaleMode = StageScaleMode.NO_SCALE;

import caurina.transitions.*;
import fl.transitions.easing.*;
import fl.transitions.*;



var lesDonneesXML:XML;
var chargeur:URLLoader = new URLLoader();
var adresseFichier:URLRequest = new URLRequest("xml/agent.xml");
var style : TextFormat = new TextFormat();
var texteErreur : TextField = new TextField ();
var container:Sprite = new Sprite();
var nouvelleCouleur:ColorTransform = new ColorTransform();
nouvelleCouleur.color = 0x009EE0;
var nouvelleCouleur2:ColorTransform = new ColorTransform();
nouvelleCouleur2.color = 0x333333;

var comptDiapo:Number ;
comptDiapo = Number(loaderInfo.parameters.maVar3)|| 0;

var portfolio:String ;
portfolio = String(loaderInfo.parameters.maVar4)||"";


style.size=10;
style.font="Verdana";
style.color=0xffffff;

texteErreur.x = 60;
texteErreur.y = 190;
texteErreur.width = 200;
texteErreur.selectable = false;
texteErreur.text="Erreur lors du chargement...";
texteErreur.embedFonts = true
texteErreur.setTextFormat(style);


chargeur.load(adresseFichier);
chargeur.addEventListener(Event.COMPLETE, chargementTermine);
chargeur.addEventListener(IOErrorEvent.IO_ERROR, indiquerErreur);


function indiquerErreur (erreur:Event ):void
{
addChild(texteErreur);
}



function chargementTermine(evt:Event)
{
lesDonneesXML = new XML(chargeur.data);

creationConteneurs();
affichageBouton();
}

function creationConteneurs():void

{

addChild(container);
container.addChild(new MovieClip()); container.addChild(new MovieClip());
container.x = 0;
container.y = 0;
var l:Loader=new Loader();
l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,chargementEnCours);
l.contentLoaderInfo.addEventListener(Event.COMPLETE,transition);
l.load(new URLRequest(lesDonneesXML.portfolio[portfolio].src[comptDiapo]));
container.addChildAt(l,2);


}

function afficherConteneurs(evt=0)

{

if (!contains (jauge)){
evt.currentTarget.fond.transform.colorTransform = nouvelleCouleur;

var l:Loader=new Loader();
l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,chargementEnCours);
l.contentLoaderInfo.addEventListener(Event.COMPLETE,transition);
l.load(new URLRequest(lesDonneesXML.portfolio[portfolio].src[(evt.currentTarget.name)]));
container.swapChildrenAt(1,2);
container.removeChildAt(2);
container.addChildAt(l,2);}

}




function chargementEnCours(evt:ProgressEvent)

{
addChild(jauge);
var pct:int=(evt.bytesLoaded/evt.bytesTotal)*100;
jauge.bar.gotoAndStop(pct);

}

function afficherMain(evt:MouseEvent)

{
//Mouse.cursor = MouseCursor.BUTTON;
evt.currentTarget.fond.transform.colorTransform = nouvelleCouleur;


}
function cacherMain(evt:MouseEvent)

{
//Mouse.cursor = MouseCursor.ARROW;
evt.currentTarget.fond.transform.colorTransform = nouvelleCouleur2;
evt.currentTarget.fond.alpha=0.5;
}

function affichageBouton ()
{
var n :Number = lesDonneesXML.portfolio[portfolio].children().length();
var ecart:Number = 8 ;
var totalWidth:Number = 605 -((n+1)*25) ;




for(var i :Number =0; i<=n-1; i++)
{

var boutonImage : MovieClip = new bouton();
boutonImage.name=""+i;
totalWidth += boutonImage.width + ecart;
boutonImage.x = totalWidth;

boutonImage.y = 385;

addChild(boutonImage);
var bTnom:TextField = new TextField();
boutonImage.bTnom.text=(lesDonneesXML.portfolio[""].nom[i]);
boutonImage.bTnom.embedFonts = true
boutonImage.bTnom.selectable = false;
boutonImage.bTnom.setTextFormat(style);
boutonImage.addEventListener(MouseEvent.MOUSE_OVER,afficherMain);
boutonImage.addEventListener(MouseEvent.MOUSE_OUT,cacherMain);
boutonImage.addEventListener(MouseEvent.CLICK,afficherConteneurs);


}

}

function transition(evt:Event):void

{

if (contains (jauge))removeChild (jauge);
container.getChildAt(2).alpha=0;
Tweener.addTween(container.getChildAt(2),{alpha:1, time:2, transition:"alpha"});
System.gc();


}
Commenter la réponse de loblobloblob
Messages postés
77
Date d'inscription
mardi 7 avril 2009
Dernière intervention
18 mars 2010
- 16 mars 2010 à 15:23
0
Merci
Même si je suis toujours coincé je pense avoir compris le fond de mon probléme, en fait en haut de mon fichier flash je crée une variable portfolio, et dans :

l.load(new URLRequest(lesDonneesXML.portfolio.src[(evt.currentTarget.name)]));

je n'appelle pas ma variable portfolio, le loader pense que le noeud ce nomme portfolio mais pas du tout c'est pour ça que ça ne fonctionne pas.

J'essaye en vain depuis tout à l'heure de mettre mas variable dans le loader mais rien à faire j'y arrive pas.

Quelqu'un aurais une idée?

Merci
Commenter la réponse de loblobloblob
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Dernière intervention
2 août 2011
- 16 mars 2010 à 19:39
0
Merci
function afficherConteneurs(evt:MouseEvent=null):void


-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Commenter la réponse de Orange73
Messages postés
77
Date d'inscription
mardi 7 avril 2009
Dernière intervention
18 mars 2010
- 17 mars 2010 à 08:54
0
Merci
merci je vais essayé ça
Commenter la réponse de loblobloblob
Messages postés
77
Date d'inscription
mardi 7 avril 2009
Dernière intervention
18 mars 2010
- 17 mars 2010 à 09:00
0
Merci
en fait ça n'a rien changer, il ne considère toujours pas portfolio comme une variable.
Commenter la réponse de loblobloblob
Messages postés
77
Date d'inscription
mardi 7 avril 2009
Dernière intervention
18 mars 2010
- 17 mars 2010 à 10:17
0
Merci
j'ai organiser mon xml différemment :



<clients>
<nom_clients>instru</nom_clients>
<nom><![CDATA[1]]></nom>
<src>arm_6.jpg</src>
</clients>
<clients>
<nom_clients>instru</nom_clients>

voici un extrait,

dans flash je crée 2 variable :

var comptDiapo:Number ;
comptDiapo = Number(loaderInfo.parameters.maVar3)|| 0;

var nom:String ;
nom = String(loaderInfo.parameters.maVar4)||"i";

pour coppter les images et pouvoir récuérer le nom de nom_client voulu depuis l'intégration du swf dans mon fichiers php, afin d'afficher que les images d'instru, ou autres

function creationConteneurs(evt=0, evtt="i"):void

{

addChild(container);
container.addChild(new MovieClip()); container.addChild(new MovieClip());
container.x = 0;
container.y = 0;
var l:Loader=new Loader();
l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,chargementEnCours);
l.contentLoaderInfo.addEventListener(Event.COMPLETE,transition);
if(lesDonneesXML.portfolio.clients.nom_client[(evtt.currentTarget.name)]==nom)
{
l.load(new URLRequest(lesDonneesXML.portfolio.clients.src[comptDiapo]));
}
container.addChildAt(l,2);


}

ici je charge les images dans le flash, mais flash m'indique en sortie :

ReferenceError: Error #1069: La propriété currentTarget est introuvable sur String et il n'existe pas de valeur par défaut.
at diaporama_test_fla::MainTimeline/creationConteneurs()
at diaporama_test_fla::MainTimeline/chargementTermine()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()

voici les différentes partie du code:

function creationConteneurs(evt=0, evtt="i"):void

{

addChild(container);
container.addChild(new MovieClip()); container.addChild(new MovieClip());
container.x = 0;
container.y = 0;
var l:Loader=new Loader();
l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,chargementEnCours);
l.contentLoaderInfo.addEventListener(Event.COMPLETE,transition);
if(lesDonneesXML.portfolio.clients.nom_client[(evtt.currentTarget.name)]==nom)
{
l.load(new URLRequest(lesDonneesXML.portfolio.clients.src[comptDiapo]));
}
container.addChildAt(l,2);


}

function chargementTermine(evt:Event)
{
lesDonneesXML = new XML(chargeur.data);

creationConteneurs();
affichageBouton();
}


Merci d'avance pour votre aide
Commenter la réponse de loblobloblob
Messages postés
77
Date d'inscription
mardi 7 avril 2009
Dernière intervention
18 mars 2010
- 17 mars 2010 à 14:36
0
Merci
Aprés quelques test j'arrive à obtenir dans la console de sortie tous les noms contenu dans ma balise nom_clients du xml collé les uns les autres :

trace(lesDonneesXML.clients.nom_clients.text());


Savez vous comment en récupérer qu'un seul, le nom courant ?
Commenter la réponse de loblobloblob
Messages postés
77
Date d'inscription
mardi 7 avril 2009
Dernière intervention
18 mars 2010
- 17 mars 2010 à 15:36
0
Merci
Après dépatouillage : trace(lesDonneesXML.clients.nom_clients.text()[0]));

m'affiche le premier élément, donc je peut facilement faire une boucle de i = 0 à i <= lesDonneesXML.clients.nom_clients.text().length() pour vérifier tous mes noeud nom_clients.

Mais maintenant j'ai un soucis de condition pour effectuer mes action.

au début du code j'ai crée une variable nom dans laquel je stoque le nom de nom_clients voulu, mais cette variable n'est initialiser que dans l'appelle du swf dans la page php.
Je n'ai aucune idée de la façon de procéder afin de n'afficher que les bonnes images propres à la gallerie souhaité.

for(var i=0; i<=lesDonneesXML.clients.nom_clients.text().length(); i++)
{
if(lesDonneesXML.clients.nom_clients.text()[i]==nom)
{
trace('node value 2');
l.load(new URLRequest(lesDonneesXML.clients.src[comptDiapo]));
}
}

Merci d'avance
Commenter la réponse de loblobloblob

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.