Accueil > Forum > > > > noeud dynamique xml
noeud dynamique xml
mardi 16 mars 2010 à 10:35:56 |
noeud dynamique xml

loblobloblob
|
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" ?>
<portfolio>
<instru>
<nom><![CDATA[1]]></nom>
<src>gedia_2.jpg</src>
</instru>
<instru>
<nom><![CDATA[2]]></nom>
<src>poutret_1.jpg</src>
</instru>
<instru>
<nom><![CDATA[3]]></nom>
<src>gedia_6.jpg</src>
</instru>
<instru>
<nom><![CDATA[4]]></nom>
<src>ot_1.jpg</src>
</instru>
<instru>
<nom><![CDATA[5]]></nom>
<src>gedia_5.jpg</src>
</instru>
<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>
</portfolio>
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
|
|
mardi 16 mars 2010 à 13:05:02 |
Re : noeud dynamique xml

pegase31
|
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'
|
|
mardi 16 mars 2010 à 13:46:49 |
Re : noeud dynamique xml

loblobloblob
|
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();
}
|
|
mardi 16 mars 2010 à 15:23:54 |
Re : noeud dynamique xml

loblobloblob
|
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
|
|
mardi 16 mars 2010 à 19:39:01 |
Re : noeud dynamique xml

Orange73
|
function afficherConteneurs(evt:MouseEvent=null):void
-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
|
|
mercredi 17 mars 2010 à 08:54:01 |
Re : noeud dynamique xml
|
mercredi 17 mars 2010 à 09:00:01 |
Re : noeud dynamique xml

loblobloblob
|
en fait ça n'a rien changer, il ne considère toujours pas portfolio comme une variable.
|
|
mercredi 17 mars 2010 à 10:17:39 |
Re : noeud dynamique xml

loblobloblob
|
j'ai organiser mon xml différemment :
<portfolio>
<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
|
|
mercredi 17 mars 2010 à 14:36:39 |
Re : noeud dynamique xml

loblobloblob
|
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 :
[code]trace(lesDonneesXML.clients.nom_clients.text());[/code]
Savez vous comment en récupérer qu'un seul, le nom courant ?
|
|
mercredi 17 mars 2010 à 15:36:48 |
Re : noeud dynamique xml

loblobloblob
|
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
|
|
Cette discussion est classée dans : var, xml, evt, container, boutonimage
Répondre à ce message
Sujets en rapport avec ce message
probleme lors Creation d'une galerie avec Clip imbriqué sous as3 [ par martin8fr ]
var imageLoader:Loader;var xml:XML;var xmlList:XMLList;var xmlLoader:URLLoader = new URLLoader();var container:MovieClip;var cadre:Cadre = new Cadre()
Ajouter du reflet sur un objet plane style carrousel [ par Alex001 ]
Bonjour à tous, Je code actuellement un site en flash AS3. Avec l'aide de plusieurs sources j'ai fini par créer des planes qui charges des images a p
Arrêt du carrousel ou arrêt de fonction [ par cash1 ]
Bonjour à tous,Voilà mon problème, j'ai trouvé le code source pour crée un carrousel effet 3D. Il fonctionne très bien mes images sont bien chargées,
XML Auto Update Data (AS 3.0) [ par nerigal ]
bonjour, ici mon problème..je doit faire un code qui extrait des données depuis un XML externe produit par un serveur exemple - 2009-02-15
impossible d'afficher des données XML [ par Otakumaster ]
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: <client nom="3M" logo="im
Erreur de fonction dans une classe [ par on_drag_on ]
Bonjour à tous,Je suis entrain de créer une classe pour un lecteur vidéo avec chargement XML. Jusque-là tout fonctionne. Maintenant j'ai créé un clip
Ajouter du texte depuis mon xml dans loadClip..; au secours [ par barytonlyrique ]
Bonsoir à tous...Je débute en Flash et je souhaite créer une pellicule qui affiche toutes mes images par mon xml et qui navigue droite/gauche selon la
mon get url a des problemes [ par tonydanza ]
Bonjour à tous, voila j'ai un petit probleme de code et je ne voie pas l'erreur :si je laisse le code comme ça l'animation est gelée, mais les liens f
Loadmovie [ par godak ]
Bonjour a tous, il y a queslques temps j'ai glané des infos sur le loadmovie : var container:MovieClip = this.createEmptyMovieClip("container", thi
transformer xml en objet --> AS3 [ par inaden ]
Bonjour,avant toute chose, désolé pour ce long bout de code.J'essaie de créer des objets dans un tableau à partir d'un XMLLe XML est de la forme :
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|