Retour à la page d'accueil

L'utilisation de XML dans Flash

Les fichiers au format XML sont extrêmement utiles pour importer ou exporter une grande quantité d'informations. En effet, les couples variable-valeur deviennent compliqués à gérer lorsqu'on transige plus que quelques variables.

Un document XML contient un arbre ordonné d'informations. Les noeuds, les branches de l'arbre, contiennent les données (des chaînes de caractères). Chaque élément d'un noeud est identifié par un nom (le type du noeud) et peut contenir des attributs comprenant une nom et une valeur. Ces noeuds peuvent contenir d'autres noeuds enfants.

L'exemple suivant est un document XML décrivant un menu de navigation. Il contient plusieurs noeuds dans lequel se trouve les informations importantes.

<menu> <item nom="Accueil" action="/index.html"/> <item nom="Produits" action="/produits.html"/> <item nom="Services" action="/services.html"/> <item nom="Clients" action="/clients.html"/> <item nom="Contactez-nous" action="/contact.html"/> </menu>

L'objet XML

Le support de Flash pour le format XML se réalise grâce à quelques objets et méthodes, principalement l'objet XML. Cet objet permet de charger des documents XML, de transformer le XML en type de données ActionScript et offre des méthodes permettant de manipuler les données. L'objet XML permet aussi d'envoyer des données XML à un serveur. Cet objet convient donc à différents types de transactions avec un serveur, pour l'envoi ou la réception d'informations, et est particulièrement efficace lorsqu'il s'agit de transiger de larges quantités de données.

Nous allons reprendre le document XML décrit plus haut afin de réaliser un menu de navigation à partir des informations qu'il contient. Nous devrons:

Charger un document XML

Notre première étape consiste à charger dans Flash le contenu d'un document XML. Nous allons d'abord créer une instance de l'objet XML, puis utiliserons la méthode load pour charger le document.

var instanceXML:XML = new XML(); instanceXML.load("menu.xml");

Une meilleure solution serait de créer une classe d'objet qui hérite de l'objet XML. Cela nous permettrait d'encapsuler le chargement du fichier, le décodage et la manipulation des données dans une seule classe. L'exemple suivant utilise cette méthode en créant une sous-classe MenuXML.

class MenuXML extends XML { public function MenuXML (fichierXML:String) { super(); this.load(fichierXML); } }

Notez l'utilisation de super() pour invoquer le constructeur de la superclasse XML. Ici, comme la sous-classe hérite des méthodes de l'objet XML, on peut invoquer la méthode load afin de charger un fichier. Référez-vous au document sur l'héritage pour vous rafraîchir la mémoire sur ce sujet.

La prochaine étape est de décoder les données (parser en anglais). Nous effectuerons cette opération sur l'événement onLoad afin de s'assurer que les données ont bien fini de charger. Notez que l'événement onLoad utilise un paramètre booléen. Si le chargement est réussi, le paramètre prendra la valeur true.

class MenuXML extends XML { public function MenuXML(fichierXML:String) { super(); this.load(fichierXML); } public function onLoad (ok:Boolean) { if (ok) { trace("fichier chargé"); // analyse les données // informe la classes d'affichage que les // données sont arrivées } else { trace("ERREUR DU CHARGEMENT"); // gère l'erreur du chargement } } }

Analyser les données

La méthode utilisée pour analyser les données dépend de l'utilisation qu'on veut en faire. Dans le cas d'un menu, les attributs nom et action serviront à inscrire le nom du bouton et à coder l'action du clic sur celui-ci. Une liste sera créée afin de stocker les valeurs. Celle-ci sera passée au scénario principal qui construira le menu.

Voici la classe MenuXML une fois ajoutée la méthode onLoad qui analyse le contenu XML:

class MenuXML extends XML { public var menuItems:Array; public var parent:Object; public function MenuXML(fichierXML:String, target:MovieClip) { super(); this.ignoreWhite = true; this.parent = target; this.menuItems = new Array(); this.load(fichierXML); } public function onLoad (ok:Boolean) { if (ok) { var listeRoot:Object = this.childNodes; var listeItem:Object = listeRoot[0].childNodes; var listeItemNb:Number = listeItem.length; for (var i=0; i < listeItemNb; i++) { var itemObj:Object = {}; itemObj.nom = listeItem[i].attributes.nom; itemObj.action = listeItem[i].attributes.action; this.menuItems.push(itemObj); } this.parent.loadMenu(this.menuItems); } else { trace("ERREUR DU CHARGEMENT"); // gère l'erreur du chargement } } }

Utiliser les données

C'est sur le scénario principal que sera créé le menu, à partir des données analysées par la classe MenuXML. Le code présent sur l'image 1 du calque Actions est le suivant:

var XMLObj:MenuXML = new MenuXML("menu.xml", this); function loadMenu (xmlObj:Array) { var menuItemNb:Number = xmlObj.length; var itemX:Number = 0; var itemY:Number = 21; var largeurLigne:Number = 109; for (var i=0; i<menuItemNb; i++) { this.attachMovie("MenuItem", "menu"+i, i, {_x:itemX,_y:itemY}); this["menu"+i].menu_txt.text = xmlObj[i].nom; this["menu"+i].lien = xmlObj[i].action; this["menu"+i].onRelease = function() { getURL(this.lien); } itemX += largeurLigne; } }

Évidemment, un symbole nommé MenuItem apparaît dans la bibliothèque. Il contient un symbole graphique représentant le bouton et un champ de texte dynamique nommé menu_txt.

Composant XMLConnector

Le composant XMLConnector (disponible seulement dans Macromedia Flash MX 2004 Professionel) est un composant qui permet de lire et de rédiger des documents XML. Il peut être utilisé pour analyser les données d'un document XML, au lieu d'un code ActionScript maison. Consultez l'aide du logiciel pour en savoir plus sur ce composant.

À propos | Formation | Ressources | Exercices
© 2004-2007, Jérôme Forget (ajouter au carnet d'adresses). Certains droits réservés.
Sous licence Creative Commons «Paternité - Partage des Conditions Initiales à l'Identique 2.0 Canada».
 Photos : stock.xchngPolitique de confidentialitéDéclaration qualité. Valide: XHTML | CSS.