banner

Précédent   InfographiK - Communauté Graphique > FLASH & ACTION SCRIPT > Flash niveau Avancé > Flash dynamique

Réponse
 
LinkBack Outils de la discussion
  #1 (permalink)  
Vieux 24/12/2003, 11h37
Avatar de eRom
Membre
 
Date d'inscription: December 2003
Localisation: Fance
Messages: 41
[TUTO MX] Xml partie 2

Bonjour à tous,

Premier complement au tuto "Xml partie 1".
Nous avons vu que les fichiers Xml doivent être chargé afin de les traiter. Seulement le chargement ne se fait d'un coup, surtout quand le fichier devient important.
De plus, nous avons vu comment accéder aux différentes données de notre objet xml, avec les childnodes et les attributes.

Nous allons voir maintenant comment suivre le chargement complet de notre fichier, et surtout je vis vous donner quelques fonctions qui permettent de traiter l'objet Xml de façon un peu plus sympathiques.

=>Chargement d'un fichier Xml
Dans le cadre de Xml, il n'est pas approprié d'utiliser les propriétés getBytesLoaded, ... en effet elles ne correspondent pas réellement au chargement du fichier. Etonnant ! mais réel !
Donc on ne peut pas faire de test sur ces propriétés.

Une façon simple de suivre le chargement est donc de faire une boucle et de tester avec la méthode onLoad() si le fichier est chargé ou non.

Pour se faire nous allon faire 2 fonctions.
- Fonction de chargement du fichier
- Fonction qui détermine les actions une fois le xml chargé.

J'ai pris pour habitude de mettre ces fonctions sur la frame 1 de mon scénario. Et de créer une frame 5 avec un label et un stop().
Une fois le fichier chargé, je vais à la frame 5.

ActionScript Code:
  1. /**********************************
  2. * Fonction chargerXml(fichier)
  3. * Chargement d'un fichier Xml
  4. * IN : fichier : nom du fichier à charger
  5. * OUT : -
  6. ***********************************/
  7. function chargerXml(fichier) {
  8.     XMLobjet = new XML();
  9.     XMLobjet.ignoreWhite = true;
  10.     XMLobjet.onLoad = chargementComplet;
  11.     XMLobjet.load(fichier);
  12. }
  13.  
  14.  
  15. /***********************************
  16. * Fonction chargementComplet
  17. * Actions à réaliser quand le fichier est chargé
  18. * IN : -
  19. * OUT : -
  20. ***********************************/
  21. function chargementComplet() { 
  22.     _root.gotoAndStop("LBxmlOk");
  23. }
  24.  
  25.  
  26. //Actions
  27. chargerXml("garage.xml")
De cette façon, quand le scénario est sur l'image 5 (label LBxmlOk dans mon exemple), on est sûr que le fichier est correctement chargé. On peut donc le traiter en toute sécurité.


=>Fonction ActionScript pour Xml
Je vais donc vous donner quelques fonctions assez pratique pour manipuler les objets Xml.
Je vous conseille, dans un but d'organisation du code, de créer un calque nommé "AS Xml". Dans la frame 1 de ce calque, mettez les fonctions Xml. D'ailleurs il serait bon de mettre les fonctions de chargement expliquées plus haut dans ce calque aussi.

- Récupération du nombre de noeud
ActionScript Code:
  1. /***********************************
  2. * Renvoie le nombre de noeud
  3. * IN : XMLobj : nombre objet xml
  4. * OUT : maxNode : nombre de noeud (type entier)
  5. ***********************************/
  6. function getXmlMaxNode(XMLobj) {
  7.     MaxNode = XMLobj.firstChild.childNodes.length
  8.     return maxNode;
  9. }
Utilisation :
ActionScript Code:
  1. trace(getXmlMaxNode(XMLobjet));
  2. //retourne 3 dans notre exemple garage.xml
  3.  

- Récupérer des données suivant le nom du noeud
ActionScript Code:
  1. /***********************************
  2. * Récupération d'une donnée via le nom d'un noeud
  3. * IN : XMLobj : notre objet Xml
  4. * IN : tag : Nom du noeud (type string)
  5. * OUT : nodes : données du noeud (type Array)
  6. ***********************************/
  7. function getXmlValueByTag (XMLobj, tag) {
  8.     var AY;
  9.     Nodes=new Array();
  10.     AY=XMLobj.toString().split("<"+tag);
  11.     AY.shift();
  12.     for (var i=0; i<AY.length; i++) {
  13.             if (AY&#91;i].charAt(0)==">" or AY[i].charAt(0)==" ") {
  14.                     Nodes.push(AY&#91;i].substring((AY[i].indexOf(">")+1), AY[i].indexOf("</"+tag+">")));
  15.             }
  16.     }
  17.     return Nodes;
  18. }
Utilisation:
ActionScript Code:
  1. trace(getXmlValueByTag(XMLobjet, "voiture"));
  2. //retourne les 3 descriptifs des voitures.
  3. //Etant un tableau, si l'on veut le descriptif de la premiere voiture, on fera : trace(getXmlValueByTag(XMLobjet, "voiture")[0]);
  4.  

- Récupérer un attribut suivant son nom et le nom du noeud
ActionScript Code:
  1. /***********************************
  2. * Récupération d'une donnée via le nom d'un noeud
  3. * IN : XMLobj : notre objet Xml
  4. * IN : tag : Nom du noeud (type string)
  5. * IN : attr : Nom de l'attribut (type string)
  6. * OUT : values : attribut des noeuds (type Array)
  7. ***********************************/
  8. function getAttrValueFromXMLtag (XMLobj, tag, attr) {
  9.         var subXML, attrValue;
  10.         Values=new Array();
  11.         subXML=XMLobj.toString().split("<"+tag);
  12.         subXML.shift();
  13.         for (var i=0; i<subXML.length; i++) {
  14.                 if (subXML&#91;i].indexOf("</"+tag+">")>=0) {
  15.                         subXML&#91;i]="<"+tag+subXML[i].substring(0, subXML[i].indexOf("</"+tag+">"))+"</"+tag+">";
  16.                 } else if (subXML&#91;i].indexOf("/>")>=0) {
  17.                         subXML&#91;i]="<"+tag+subXML[i].substring(0, subXML[i].indexOf("/>"))+"/>";
  18.                 } else { subXML&#91;i]="hiba;"}
  19.                 childXML=new XML(subXML&#91;i]);
  20.                 attrValue=eval("childXML.firstChild.attributes."+attr);
  21.                 if (attrValue.length>0) {Values.push(attrValue);}
  22.         }
  23.         return Values;
  24. }
Utilisation:
ActionScript Code:
  1. trace(getAttrValueFromXMLtag (XMLobjet, "voiture", "marque"));
  2. //retourne les 3 marques des voitures.
  3. //Etant un tableau, si l'on veut la marque de la premiere voiture, on fera : trace(getAttrValueFromXMLtag (XMLobjet, "voiture", "marque")[0]);
  4.  

Voilà, avec ces quelques fonctions, on va pouvoir faire presque tous les traitements que l'on veut sur les fichiers Xml.
Je voudrais remercier D.Kiss, pour l'élaboration des dernières fonctions. En effet, ce n'est pas la peine de réinventer la roue et de perdre du temps de développement, alors que des fonctions existe déjà, en tout cas le squelette, à vous par la suite d'optimiser, de la mettre à votre sauce.

Bon code à tous et joyeux noel....
@+
__________________
<- Pourquoi est la seule et vraie question ->
Réponse avec citation
  #2 (permalink)  
Vieux 26/12/2003, 20h51
Avatar de JaH_LiveS
Vieux con
 
Date d'inscription: June 2002
Localisation: Pas loin...
Messages: 1 025
Big thx, j'aurais peut etre klks questions quant à exploitation du xml mais g déjà eu pas mal de clés avec ce tuto. THX !
__________________
Réponse avec citation
  #3 (permalink)  
Vieux 03/01/2004, 17h50
Avatar de eRom
Membre
 
Date d'inscription: December 2003
Localisation: Fance
Messages: 41
Oki pki, perso jsuis en plein "Recherche & Developpement" sur le Xml.
En effet je suis passé au pur "Dynamique" depuis peu avec Flash.
Je suis donc loin d'être un pro, mais j'essaie de le devenir....

De plus avec Flash MX 2004, il y a vraiment des truc sympa comme le "XmlConnector". Ca simplifie franchement la gestion du Xml...
Mais bon, le tout c'est de se mettre dedans à fond....

Allez @+ je retourne au code....
__________________
<- Pourquoi est la seule et vraie question ->
Réponse avec citation
  #4 (permalink)  
Vieux 11/01/2006, 15h59
Soo Soo est déconnecté
Nouveau iker
 
Date d'inscription: February 2005
Localisation: Sur la lune
Messages: 5
Merci pour ce tutorial très bien expliqué !!
Réponse avec citation
Réponse

Outils de la discussion

Règles de messages
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui



Fuseau horaire GMT +2. Il est actuellement 15h59.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0 Tous droits réservés.
Version française #13 par l'association vBulletin francophone

Communauté Graphique
CNIL : 1130886