IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Utiliser du XML en Action Script 3

Découvrez rapidement et simplement comment accéder aux données d'un document XML en ActionScript 3. ♪

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

Introduction

Il arrive fréquemment, lorsque l'on manipule du XML via l' ActionScript 2, que l'on en arrive à écrire une chose du genre :
docXML.firstChild.childNodes[2].childNodes[i].ChildNodes[j].ChildNodes[e].attributes.name
en cherchant une simple propriété de nœud XML…Pas pratique n'est-ce pas ? Nous allons découvrir dans ce cours, la nouvelle façon d'accéder à ces informations, en ActionScript 3 à l'aide de séries d'exemples simples.

I. Rappels sur le chargement de fichiers externes

En ActionScript 2, nous utilisions l'objet XML pour charger et « parser » un document XML. En ActionScript 3, le système a été repensé, nous utilisons la classe URLLoader pour charger le document. * Si vous ne savez pas charger un fichier en ActionScript 3, je vous invite dès à présent à lire le chapitre II de mon tutoriel sur les chargements, en vous rendant ici.

Voici, pour rappel, un exemple simple de code qui va nous permettre de charger le fichier XML que je n'expliquerai pas ici, un tutoriel existant déjà .

 
Sélectionnez
// nous importons les classes nécessaires :
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;

// nous déclarons un objet URLLoader :
var chargeur:URLLoader = new URLLoader ();

// nous créons un objet URLRequest qui contient l'URL du fichier :
var adresse:URLRequest = new URLRequest ("/fichier/exemple.xml");

// nous définissons le format du fichier chargé :
var format = URLLoaderDataFormat.TEXT;
chargeur.dataFormat = format;

// nous lançons le chargement du fichier, en indiquant l'adresse de celui-ci par l'objet URLRequest :
chargeur.load(adresse);

// définition des événements de l'objet chargeur
chargeur.addEventListener(Event.COMPLETE, finDuChargement);
chargeur.addEventListener(ProgressEvent.PROGRESS, avancement);
chargeur.addEventListener(IOErrorEvent.IO_ERROR, indiquerErreur);

// définition de la fonction exécutée par l'événement COMPLETE :
// ( déclenchée lorsque le chargement se termine )
function finDuChargement ( event:Event ) {
    var contenu = event.target.data;
    trace("chargement fini ! "+contenu);
}

// définition de la fonction exécutée par l'événement PROGRESS :
// déclenchée à chaque avancement du chargement )
function avancement( event:Event) {
    trace(event.bytesLoaded+" chargés sur "+event.bytesTotal);
}

// fonction indiquant si une erreur de chargement survient :
function indiquerErreur( event:Event ) {
    trace(event);
}

Nous nous retrouvons donc avec notre objet loader et sa propriété data qui va permettre de récupérer le contenu du fichier XML. Notez que la propriété dataFormat de l'objet URLLoader sera informée de URLLoaderDataFormat.TEXT;

II. La classe XML en actionScript 3

II-A. Déclarer un objet de type XML

Pour déclarer un objet de type XML, en ActionScript, plusieurs possibilités s'offrent à vous, Si vous êtes adepte de simplicité, il vous suffit d'opérer comme suit :

 
Sélectionnez
var monXML:XML = <root>
                    <balise variable="testA" />
                    <balise vairbale="testB" />
                    <tests>
                        <test1/>
                        <test2/>
                    </tests>
                 </root>;

Remarquez l'absence de guillemets ! Ce n'est plus des données formatées en String.

Vous pouvez également opérer en instanciant le constructeur de la classe XML :

 
Sélectionnez
var monXML:XML = new XML ();
monXML = <balise><test/></balise>;

Ou bien en instanciant le constructeur de la classe XML, avec le contenu de type String (avec guillemets ou sans guillemets dans les arguments :

 
Sélectionnez
var monXML:XML = new XML ("<balise><test/></balise>");
// ou bien :
var monXML:XML = new XML (<balise><test/></balise>);

II-B. Lire un objet de type XML

L'ActionScript 3 nous offre une manière bien plus souple pour accéder aux nœuds XML que l'ActionScript 2 et ActionScript 1.
Nous listerons les principales méthodes/syntaxes à connaître tout en les illustrant par des exemples.

II-B-1. Accéder au nœud principal

L'utilisation de la propriété firstchild de l'ActionScript 2 sur l'objet XML devient inutile, on accédera au contenu directement avec l'instance, sans se soucier de cela.
Ainsi :

 
Sélectionnez
var xml:XML = <balise><test>BlaBla</test></balise>;
trace(xml.test); // affiche "BlaBla"

Notez que pour connaître le nom du nœud principal, vous pouvez utiliser la méthode localName();

II-B-2. Accéder à l'objet au format String

Vous pouvez utiliser la méthode toXMLString() pour transformer votre objet en objet de type String.

II-B-3. Accéder aux balises

En ActionScript 3, une balise fille est assimilable une propriété de sa balise mère :

 
Sélectionnez
var xml:XML = <root><balise>Test</balise></root>;
trace(xml.balise); // trace Test
//ou :
trace(xml.balise[0]); // trace Test

II-B-4. Accéder aux attributs d'une balise

En ActionScript 2, nous utilisions .attributes avec d'accéder à un attribut de balise, En ActionScript 3, pour accéder aux attributs d'une balise, nous utiliserons le préfixe @.

 
Sélectionnez
var xml:XML = <root><balise name="Test" text="Je suis un attribut" /></root>;
trace( xml.balise.@name ); // trace Test

Notez la syntaxe entre crochets équivalente :

 
Sélectionnez
var xml:XML = <root><balise name="Test" text="Je suis un attribut" /></root>;
trace( xml.balise.@["name"] ); // trace Test

Il est également possible d'utiliser la méthode attribute();

 
Sélectionnez
var xml:XML = <root><balise name="Test" text="Je suis un attribut" /></root>;
trace(xml.balise.attribute("name") ); // trace Test

II-C. Parcourir un nœud

Encore une fois, l'ActionScript 3 va vous simplifier la tâche, plusieurs façons de parcourir (parser) un nœud XML existe :

 
Sélectionnez
var xml:XML = <root>
<balise name="balise1" />
<balise name="balise2"/>
<balise name="balise3"/>
</root>;

for(var i in XML..balise) {
    trace(xml.balise[i].@name);
}

Vous pouvez également user de la fonction for each(var i in Array) {};, nouvelle, qui renvoie l'élément et non l'index d'un nœud ou tableau :

 
Sélectionnez
for each(var bal in XML..balise) {
    trace(bal.@name);
}

Plus condensé encore, vous pouvez l'écrire comme ceci :

 
Sélectionnez
trace(XML..balise.@name);

Ce code, très condensé, devient particulièrement intéressant lorsque l'on pose une condition pour trouver une balise. Si nous cherchons la balise dont l'attribut name=« balise2 », nous ferons :

 
Sélectionnez
var xml:XML = <root>
<balise name="balise1" />
<balise name="balise2"/>
<balise name="balise3"/>
</root>;

var balise = XML..balise.(@name=="balise2");
trace(balise.toXMLString()); // affiche <balise name="balise2"/>

II-D. Travailler sur un objet de type XML

II-D-1. Ajouter un nœud

Nous n'avons plus le besoin d'utiliser XMLNodes, il nous suffit de définir un objet monNœud:XML, que nous ajouterons ensuite avec la méthode appendChild();

 
Sélectionnez
var xml:XML = <root><balise name="Test" text="Je suis un attributs" /></root>;
var monNoeud:XML = <balise name="noeud" text="Je suis un attributs" />;
xml.appendChild(monNoeud);

Il est, bien sûr, possible d'inclure des données dynamiquement, pour cela, utilisez {} avec votre variable.

 
Sélectionnez
var xml:XML = <root><balise name="Test" text="Je suis un attribut" /></root>;
var nom="noeuds (dynamique cette fois)";
var monNoeud:XML = <balise name={nom} text="Je suis un attribut" />;
xml.appendChild(monNoeud);

III. Conclusion

Ce cours touche à sa fin. Vous devriez à présent être en mesure de manipuler du XML avec l'ActionScript 3.
Je vous encourage à me joindre pour toute idée, suggestion, correction, en cliquant ici.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.