Auteur: Jérôme Forget. Publié le 12 novembre 2006.
XML (pour eXtensible Markup Language) est un langage de balisage utilisé pour faciliter la communication et l'échange de données entre applications. Par exemple, un document XML peut contenir des données qui seront utilisées dans Flash pour garnir un composant, pour stocker les URLs des images, ou plus encore.
Prenons le document XML suivant, qui servira à afficher un article dans Flash . Ce document contient un élément racine, article, et trois noeuds enfants, titre, auteur et corps. Enregistrez ce document XML dans un fichier texte nommé document.xml.
<article>
<titre>Titre de l'article</titre>
<auteur>Jérôme Forget</auteur>
<corps>Corps de l'article.</corps>
</article>
Flash possède une classe d'objet XML qui rend possible le chargement ou l'envoi de données au format XML, ainsi que l'analyse syntaxique du document. Commençons par charger ce document XML dans FLash.
var xmlObj:XML = new XML();
xmlObj.ignoreWhite = true;
xmlObj.onLoad = function(ok:Boolean) {
if (ok) {
trace("fichier chargé");
} else {
trace("erreur");
}
}
xmlObj.load("document.xml");
La première instruction construit une nouvelle instance de l'objet XML nommée xmlObj. La seconde ligne indique à cet objet d'ignorer les espaces blancs du document XML. On détermine ensuite les actions à poser lorsque le chargement est complété, puis on termine en invoquant la méthode load() qui permet de charger le document XML. L'objet XML fonctionne, sur ce point, tout comme l'objet LoadVars.
L'analyse syntaxique d'un document XML est la partie la plus délicate de l'opération. Il est nécessaire, pour y arriver, de bien comprendre l'arbre des données et la notion de noeud XML.
D'abord, nous isolons l'élément racine du document XML et le stockons dans un objet générique xmlRoot. Cela nous permet ensuite d'isoler l'ensemble des noeuds enfants du document dans la variable xmlNoeuds. Cette étape est importante et nous permet également de calculer le nombre de noeuds enfants du document, avec la propriété length. Ce nombre sera essentiel si on veut analyser un large document à l'aide d'une boucle for().
Les instructions suivantes doivent être ajoutées juste après la ligne trace("fichier chargé");, à l'intérieur de la condition if (ok) :
var xmlRoot:Object = this.firstChild;
var xmlNoeuds:Object = xmlRoot.childNodes;
var numNoeuds:Number = xmlNoeuds.length;
On peut ensuite extraire les données des noeuds. Comme pour l'objet Array, les noeuds des documents XML sont numérotés à partir de 0. Ainsi, nous sélectionnons, pour chaque noeud enfant du document, l'élément firstChild, dans ce cas-ci le noeud texte compris à l'intérieur des balises.
var titre:String = xmlNoeuds[0].firstChild;
var auteur:String = xmlNoeuds[1].firstChild;
var corps:String = xmlNoeuds[2].firstChild;
L'analyse d'un document XML se fait donc en parcourant l'arbre des données, à partir des noeuds principaux et en descendant sur chaque élément. L'accès aux données pourrait ainsi ressembler à ceci, dans un document XML avec une arborescence plus détaillée :
xmlNoeuds[0].childNodes[2].childNodes[1].firstChild