Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

INTRODUCTION AU XML (MX 6 ET ULTERIEURS)


Information sur le tutorial

Catégorie :ActionScripts Date de création : 25/08/2005 21:50:17 Vu : 20 687 fois

Note :
9,79 / 10 - par 19 personnes
9,79 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (56)
Ajouter un commentaire et/ou une note


Description

Ce cours vous donnera les bases de l'exploitation du XML dans flash, ainsi que les bases du XML lui meme.
Cours, precis, concis, adapté aux debutants.

Tutorial

Introduction au XML

 

Pour expliquer comment utiliser le xml dans flash, je vaisprendre un exemple concret.

Nous apprendre à exploiter un fichier xml en prenant commeexemple un système de news fictif.

Nous ne réaliserons que l'exploitation des donnée, pas lesystème lui même.

L'affichage se fera via la fonction trace().

 

Je part sur le principe que vous connaissez les fonctions debase du langage, en particulier les boucles et les bases de la POO.

 

Voici donc le fichier sur lequel nous allons travailler;

<?xml version='1.0' encoding='UTF-8' ?>

<main>

 

  <news>

    <title value="titre de la news" />

    <texte>

      <![CDATA[ blablabla ]]>

    </texte>

    <links>

      <link url="http://www.allboard.net" text="Allboard Network" />

      <link url="http://www.blackwizzard.com" text="BlackWizzard NetWork" />

      <link url="http://www.underground-fr.com" text="Underground-fr" />

    </links>

  </news>

 

  <news>

    <title value="une 2eme news" />

    <texte>

      <![CDATA[ texte de la 2eme news ]]>

    </texte>

    <links>

      <link url="http://www.v-network.info" text="Allboard Network" />

    </links>

  </news>

 

</main>

 

Comme vous pouvez le voir, nous devons spécifier un header.si il n'y en a pas, flash va quand même le charger, mais ce header permet depréciser l'encodage.

<?xml version='1.0' encoding='UTF-8' ?>

 

 

Les info sont entre <?xml et ?>

version='1.0' ne changera pas puisque seul la version 1.0existe pour l'instant ;)

 

encoding='UTF-8' détermine l'encodage du fichier.

UTF-8 est le plus utilisé, mais il existe une multituded'encodages possibles.

UTF-8 est le codage 'européen'. Il est celui utilisé dansles pays utilisant notre alphabet.

Il existe d’autres encodages tels que windows-1252,ISO-8859-1, UTF-16 ...

 

Apres le header, nous voyons que les Balises sont mis entreune paire de balise <main></main> que l'on appelle balises"root".

Quelque soit le document xml, Tout le document doit êtreencadré ce cette pair de balise.

Le nom de cette paire balise n’a pas d'importance.

 

Il y a 2 types de balises;

Celles, comme en HTML qui se composent en paire<nom></nom> et celles uniques, qui sont de type <nom />

Chaque type de balise ouvrante peut accueillir desparamètres, exemple, <nom paramètre="valeur"></nom> ou<nom paramètre="valeur" />.

Les balises uniques ne servent uniquement a accueillir desparamètres.

Pour fournir un texte complet, mettez le entre une paire debalises, mais attention! si votre texte se compose de code html, les baliseshtml seront considérés comme des balises xml, ce qui entraînera souvent uneerreur.

Pour éviter cela, Vous pouvez placer votre texte entre lespseudo balises <!CDATA![ et ]]>.

Exemple:

  <nom>

    Voici un texte en gars: <br>

    <b>blablabla</b>

  </nom>

Si vous faittes comme cela, les balises html vont etre considérées comme du xml, et la syntaxe n'etant pas correct, en particulier pour le <br>, le fichier va retourner une erreur. C'est alors qu'intervient le CDATA:

  <nom>

    <![CDATA[

      Voici un texte en gars: <br>

      <b>blablabla</b>

    ]]>

  </nom>

 

Tout ce qui se trouve dans la balise CDATA ne sera pas interprété.

 

Maintenant que vous possédez les bases syntaxiques du XML,nous allons commencer le code action script.

 

Pour exploiter du xml, nous devons déclarer un nouvel objetXML:

        myXML = new XML();

 

Nous voulons que les espaces et sauts de lignes ne soientpas interprétés (ce qui est préférable, sinon ça fout le bordel), pour cela,nous disposons de la propriété ignoreWhite:

                myXML.ignoreWhite = true;

 

Nous allons maintenant charger le fichier:

        myXML.load("fichier.xml");

 

Le fichier pouvant mettre plusieurs secondes a se charger enfonction de sa taille et de la vitesse de connexion, nous allons faireintervenir la fonction onLoad() qui exécutera son code des que le xml estchargé. Cette fonction reçoit un argument de type booléen (1 ou 0; true oufalse) qui correspond a l'état de chargement; true(1) = le document est chargé,false(0) = le document n'est pas chargé, probablement indisponible ou enerreur:

myXML.onLoad = function(flag) {
        if (flag) { // si flag = true
                // reste du code.
        }
}

 


 

Maintenant que nous savons composer et charger un documentXML, il faut l'analyser.

Pour cela, Nous allons parcourir les "branches" dufichier, qui comme tt le monde a du le remarquer se compose comme unearborescence.

Pour cela, nous allons utiliser une boucle while(), bienqu'il soit aussi possible de passer par un for().

Voici l'arborescence sommaire du fichier :

 

+main

-+news

----title (value)

----texte [cdata]

---+links

------link 1 (url, text)

------link 2 (url, text)

------link 3 (url, text)

-+news

----title (value)

----texte [cdata]

---+links

------link 1 (url, text)

 

 

J’espère qu'il est assez clair pour tt le monde.

 

Afin de parcourir le fichier, nous disposons de 2 fonctionsprincipales:

xml.firstChildet xml.childNodes[x]

xml.firstChild retourne la première "branche" dunoeud "xml".

xml.childNodes[x] retourne le noeud "x" du noeud"xml", sinon il retourne "undefined" si la valeur du noeud"x" n'est pas trouvée.

xml.firstChildet xml.childNodes[0] sont donc similaires

 

Quand le fichier xml est chargé, notre objet XML"myXML" prend comme valeur le contenu du fichier xml.

Vous pouvez vous en rendre compte en effectuant untrace(myXML);

Donc, afin d'isoler les sections de news, nous pouvons fairetrace(myXML.firstChild); qui va nous retourner uniquement les zones de news.

 

Etant donnée que le nombre de news est dynamique, nousallons les afficher une par une, sans savoir a l'avance combien il y en a.

Pour cela, nous allons utiliser notre boucle while,xml.childNodes[x] et xml.firstChild.

(tout le code qui suis devra se placer a la place de"// reste du code.", dans la fonction onLoad()).

 

//initialisation
i=0; // on initialise le compteur.
x = myXML.firstChild; // on se place sur le noeud des news.
while (x.childNodes[i] != undefined) { // tant qu'il y a des news...
        trace(x.childNodes[i]); // on affiche le noeud de news trouvé.
        i++; // on incrémente le compteur.
}
trace(i+" news trouvées");      // on affiche le nombre de news trouvé, c'est pas utile
// pour ce tutorial, mais c'est un plus ;)

 

Voila!

Nous avons commencé à parcourir le fichier!

Si vous avez compris le bout de code ci-dessus, vous aveztout compris du xml, ou presque.

 

Mais afin de faire un tutorial complet, je vais allerjusqu'au bout de cette exploration du fichier.

Nous avons donc su afficher chaque noeud de news.

Nous allons donc explorer chaque news!

Pour cela, nous devons nous servir d'une nouvelle fonction:xml.attributes

Pour comprendre l'utilité de cette fonction, il faut voirles spécificités du xml; En effet, nous avons 2 façons pour stocker du texte:

- entre une paire de balise: <nom>texte</nom>

- dans une balise: <nom attr="texte" />

Pour accéder au premier type (la paire de balise), un simplefirstChild suffit.

Par contre, pour accéder a la balise elle même, nous devonsutiliser noeud_xml.attributes.nom_attribut

Exemple:

Pour<link url="http://www.allboard.net" text="AllboardNetwork" />

Pour accéder a la valeur de "url", nous allonsfaire noeud_xml.attributes.url

Et pour accéder a la valeur de "texte"noeud_xml.attributes.text

 

Voici donc le code complet qui permet d'explorer le fichierxml.

Vous disposez maintenant de toutes les notions nécessairespour comprendre ce code.

 

i = 0;
x = myXML.firstChild;
while (x.childNodes[i] != undefined) {
        trace(""); // ligne vide
        trace("--- NEWS "+(i+1)+" ---"); // le (i+1) permet d'afficher "NEWS 1" et non pas "NEWS 0",
        // mais c'est juste une question esthetique.
        trace("titre:\t"+x.childNodes[i].childNodes[0].attributes.value); // le titre, avec le fameux "attributes"!
        trace("texte:\t"+x.childNodes[i].childNodes[1].firstChild); // le texte, via un simple firstChild.
        trace("liens:"); // ha! là on ne sais pas combien il y a de liens par news! ça devient interessant!
        j = 0; // on initialise j.
        while (x.childNodes[i].childNodes[2].childNodes[j] != undefined) { // tant qu'il y a des liens...
                trace("\t --- LIEN "+(j+1)+" ---"); // on affiche le numero de lien...
                trace("\t lien:\t"+x.childNodes[i].childNodes[2].childNodes[j].attributes.url); // ...son url,
                trace("\t texte:\t"+x.childNodes[i].childNodes[2].childNodes[j].attributes.text); // son texte...
                j++; // on incremente le compteur j.
        }
        i++;
}
trace(""); // ligne vide, purement esthetique.
trace(i+" news trouvées");      

 

Et voila!

Vous pouvez désormais vous servir du xml, qui est sipratique avec flash!

Un conseil, avant de coder, regardez bien la structure duxml, si elle est complexe, faites le shema simplifié comme on a fait, etdistinguez bien les éléments statiques (titre, texte toujours au même nombre età la même place) des éléments dynamiques (souvent a la même place, maisrarement au même nombre).

 

Amusez vous bien!


Le code final

 

myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("file.xml");
myXML.onLoad = function(flag) {
        if (flag) {
                i = 0;
                x = myXML.firstChild;
                while (x.childNodes[i] != undefined) {
                        trace("");
                        trace("--- NEWS "+(i+1)+" ---");
                        trace("titre:\t"+x.childNodes[i].childNodes[0].attributes.value);
                        trace("texte:\t"+x.childNodes[i].childNodes[1].firstChild);
                        trace("liens:");
                        j = 0;
                        while (x.childNodes[i].childNodes[2].childNodes[j] != undefined) {
                                trace("\t --- LIEN "+(j+1)+" ---");
                                trace("\t lien:\t"+x.childNodes[i].childNodes[2].childNodes[j].attributes.url);
                                trace("\t texte:\t"+x.childNodes[i].childNodes[2].childNodes[j].attributes.text);
                                j++;
                        }
                        i++;
                }
                trace("");
                trace(i+" news trouvées");
        }
};

 


Tutorial écrit par Julien Loutre, alias BlackWizzard.

 

Diffusion électronique autorisée en  l’état.

Toute modification doit faire l’objet d’un accord écrit del’auteur.

L’impression ou la diffusion dans un but lucratif eststrictement interdite sans autorisation préalable.

 

Contact :

Tel          (+33)0615576747

Email      blackwizzard@gmail.com

 [collé depuis word]

signaler à un administrateur
Commentaire de esco le 27/10/2005 01:35:41

Que dire...excellent !
Ce tuto est très clair, mon flash marche parfaitement, que demander de plus ?

- Mon seul soucis, c'est que les 'é','è','à','ç' s'affichent bizarrement (jpense que cela doit venir du encoding='UTF-8')
- Autre petit problème, <![CDATA[ Voici un texte en gars: <br><b>blablabla</b> ]]> ne marche pas chez moi.

Mais bon, c'est du détail, et on peut faire sans.
Grand merci à toi BlackWizzard. J'te mets un 10/10 ;)

signaler à un administrateur
Commentaire de moonj le 23/11/2005 11:22:41

Parfait Merci tres bien expliqué

signaler à un administrateur
Commentaire de moonj le 23/11/2005 14:39:43

BIG dsl pas fe gaffe g clic sur une etoile ss faire expres et g mis 5 :( c 10  qu il fo!

signaler à un administrateur
Commentaire de BlackWizzard le 23/11/2005 21:03:54 administrateur CS

pas de prob, je supprime ta notation.

signaler à un administrateur
Commentaire de doudou3158 le 26/11/2005 00:29:42

waou il a l'air d'etre bien mais bon le mettre en catégorie 1 qui je considere et pour les debutants moyen moyen car frenchemnt j'ai essyé mais les 3/4 des fonction je ne sais pas ce quel veule dire c'est peut etre ou je ne sais pas enfin 'ets surment moi comme je comprend jammais rien...enfin bref je te met 10 pck le peut que j'ai compris c'était trés claire

signaler à un administrateur
Commentaire de kaderfree le 17/12/2005 11:47:35

cool ce tuto
thanks friends

signaler à un administrateur
Commentaire de enigmatiqk le 20/12/2005 10:57:20

il est super bien fait ce tutorial !!, seule chose manquante, l'utilisation d'une function récurente (dans le cas d'un xml bien grand :p), j'ai essayé de le faire mais sans succès, si quelqu'un pouvais y mettre le code afin de completer son tutorial, pour le bien de tous (et du mien :p), merci :)

signaler à un administrateur
Commentaire de Slyvaan le 21/02/2006 12:36:31

Ce code marche super, merci pour cette information, ca va grandement m'aider.

Par contre j'ai un petit probleme que je ne comprends pas (debutant flash ; ; )...
Le texte s'affiche dans une fenetre "Sortie" kan je fais le test de mon anim flash, tout est affiché correctement comme je le désirait...
Par contre je n'arrive pas a trouver comment faire pour afficher ca directement sur mon animation flash dans un bloc de texte (dynamique ou statique), quand je fais un F12 je ne vois rien affiché non plus. J'ai peut etre manqué une partie du tuto ou pas compri je ne sais pas :)

si quelqu'un pouvait m'eclairer ca serait super :D

Merci beaucoup :)

signaler à un administrateur
Commentaire de BlackWizzard le 21/02/2006 18:40:18 administrateur CS

Le resultat sort en mode debug, en gros, la commande trace() permet de faire une sortie uniquement dans l'IDE flash, pas dans le player.
Essai plutot nom_du_textfield.text = "valeur"; pour le faire sortir dans une zone de texte.

signaler à un administrateur
Commentaire de pegase31 le 22/02/2006 07:16:43 administrateur CS

ah, ben franchement un grand merci à toi .. je viens de me lancer dans le test d'un XMLsocket et j'y connaissait rien en XML ... maintenant c'est plus le cas et tout ça en quelques heures !

Peg'

signaler à un administrateur
Commentaire de Slyvaan le 23/02/2006 11:02:02

merci beaucoup, ca marche, j'ai reussi a avoir ce que je voulais :)

signaler à un administrateur
Commentaire de cortoh le 27/02/2006 18:46:12

petite question du soir: flash peut il generer un fichier XML sans avoir recours a un autre langage, PHP ou ASP?

signaler à un administrateur
Commentaire de BlackWizzard le 01/03/2006 16:51:33 administrateur CS

Il peut generer, mais pas l'exporter.
Flash n'as pas les acces pour ecrire un fichier sans passer par d'autres langages.

signaler à un administrateur
Commentaire de cortoh le 01/03/2006 17:23:13

mouais, il me semblait bien aussi... c'est ballot... merci, en tout cas.

signaler à un administrateur
Commentaire de mctyler le 02/03/2006 00:42:05

Super le tuto.
Je suis débutant en flash et je voudrais savoir comment insérer plusieurs ligne dans un champs texte dymamique?
J'ai bien compris ce qu'a dit "BlackWizzard" mais moi j'obtient que le dernier résultat et je voudrais avoie la totalité du résultat.

Merci à ceux qui peuvent m'aider.

rank

signaler à un administrateur
Commentaire de cortoh le 02/03/2006 01:28:21

mmm, meme hors ligne? je veux dire, ecrire sur le disque hors ligne?

signaler à un administrateur
Commentaire de BlackWizzard le 03/03/2006 08:37:59 administrateur CS

Click sur ton textField, et va voir les propriété. passe le en multiligne.

signaler à un administrateur
Commentaire de Dav57 le 20/04/2006 20:11:41

Super tuto, ça fonctionne, mais ensuite ? comment fait-on pour afficher le contenu de ce fichier xml dans l'animation. Je n'obtiens qu'un fichier de sortie :)

signaler à un administrateur
Commentaire de lisambert le 01/05/2006 06:06:33

Super ce tutorial.

Juste une petite remarque sur un point oublié : les caractères accentués...
Si vous souhaitez passer des caractères accentués de xml à Flash (par exemple, vous avez la phrase "évènement à Paris" dans vos données xml à faire afficher dans une zone de texte dynamique de Flash), il y a souvent problème de compatibilité de codage des caractères.

En effet, depuis 2004, Flash MX utilise le codage "unicode", qui sera de plus en plus utilisé à l'avenir.

Pour lire sans problème vos données, il faut bien mettre en entête <?xml version='1.0' encoding='UTF-8' ?> dans votre fichier xml, mais il faut surtout enregistrer votre fichier xml contenant des caractères accentués au format "unicode".
Ceci se fait simplement avec le bloc-note de Win XP : "enregistrer sous...", mettez le nom de fichier, puis sélectionnez "unicode" pour le codage.

Avec cette méthode, pas besoin de remplacer les lettres avec accent par leur code, on peut simplement les écrire en clair : "é", "à", "ï".

En espérant que cette précision servira, cordialement.
Loïc.

signaler à un administrateur
Commentaire de BlackWizzard le 01/05/2006 12:44:32 administrateur CS

On peut egalement utiliser l'instruction
System.useCodePage = true;

signaler à un administrateur
Commentaire de aureliendeharbe le 18/06/2006 22:06:41

Super tuto très clair et très pratique, merci beaucoup !

signaler à un administrateur
Commentaire de q1proust77 le 26/06/2006 19:19:12

RIen a dire : super code

signaler à un administrateur
Commentaire de Hash2o le 03/10/2006 17:48:31

Pas mal l'explication mais pour les gens qui n'ont jamais touché a l'XML (comme moi) c'est pas évident du tout surtout pour faire appel a l'XML avece flash :)

signaler à un administrateur
Commentaire de buzhug35 le 08/10/2006 13:17:15

Bonjour,
Mon problème étéit de faire apparaître les caractères accentués. J'ai enregistré mon fichier xml en UTF-8 (préférences dans Subethaedit) et ai retesté … pas d'amélioration. j'ai rajouté la "balise" CDATA, pas d'amélioration : j'ai toujours un grand trou à la place du è.
Pour info, mon "tout petit" fichier HTML :

<?xml version="1.0" encoding="UTF-8" ?>

    <textes>
        <enonce> <![CDATA[Complète toutes les cases.  ]]></enonce>
        <bonnereponse> Super ! </bonnereponse>
        <mauvaisereponse> Tu te trompes, recommence. </mauvaisereponse>
    </textes>

Remarque : auparavant, j'avais essayé sous la forme

<textes>
    <texte nom="enonce" aecrire="Complète toutes les cases." />
    <texte nom="bonnereponse" aecrire="Super ! " />
    <texte nom="mauvaisereponse" aecrire="Tu te trompes, recommence. " />
</textes>

Mais le grand trou existait déjà … si quelqu'un peut m'aider d'avance merci (je travaille sous Mac, avec Flash 8 et mon objectif est d'extérioriser en xml les textes et commentaires afin de produire des pages bilingues … et j'ai absolument besoin des caractères accentués !).
Cordialement

signaler à un administrateur
Commentaire de BlackWizzard le 08/10/2006 19:40:34 administrateur CS

Dans ton code:
System.UseCodePage = true;

ça devrais resoudre le probleme.

signaler à un administrateur
Commentaire de ghaiti le 31/10/2006 22:09:47

merccccccccccccccccccccccci

signaler à un administrateur
Commentaire de Al3XxX le 02/11/2006 13:22:56

J'suis dsl de te deranger BlackWizzard mais... nom_du_textfield.text = "valeur"; j'comprend pas cette ligne... :$

sinon tres bon tuto Merci j'comprend le xml mnt :)

signaler à un administrateur
Commentaire de BlackWizzard le 02/11/2006 16:14:55 administrateur CS

Sur la scene, tu crée un textfield (champ de texte) dynamique (important, un statique ne fonctionnera pas), que tu nomme par exemple "montextfield".

Tu renomeras donc la ligne
nom_du_textfield.text = "valeur";
en
montextfield.text = "valeur";

signaler à un administrateur
Commentaire de BlackWizzard le 02/11/2006 16:18:15 administrateur CS

exemple:
(je n'ai pas testé, mais ça devrais fonctionner)



myXML = new XML();

myXML.ignoreWhite = true;

myXML.load("file.xml");

myXML.onLoad = function(flag) {

        if (flag) {

                i = 0;

                x = myXML.firstChild;

                while (x.childNodes[i] != undefined) {


                        montextfield.text = "--- NEWS "+(i+1)+" --- \n";

                        montextfield.text = "titre:\t"+x.childNodes[i].childNodes[0].attributes.value+"\n";

                        montextfield.text = "texte:\t"+x.childNodes[i].childNodes[1].firstChild+"\n";

                        montextfield.text = "liens: \n";

                        j = 0;

                        while (x.childNodes[i].childNodes[2].childNodes[j] != undefined) {

                                montextfield.text = "\t --- LIEN "+(j+1)+" --- \n";

                                montextfield.text = "\t lien:\t"+x.childNodes[i].childNodes[2].childNodes[j].attributes.url+"\n";

                                montextfield.text = "\t texte:\t"+x.childNodes[i].childNodes[2].childNodes[j].attributes.text+"\n";

                                j++;

                        }

                        i++;

                }

                

                montextfield.text = i+" news trouvées";

        }

};

signaler à un administrateur
Commentaire de hbakha2000 le 04/11/2006 12:11:29

merci beaucoup, ca marche.

mai j'ai un probleme je utilise mon flash dans une page PHP
ou le fichie XML change.

la 1ere fois le flash  me donne un bonne resultat
mais apret que le fichies XML change il me donne le resultat de la 1ere fois
il rest avec les même resulat de la 1ere l'ensment de l'instruction Load()  

signaler à un administrateur
Commentaire de BlackWizzard le 04/11/2006 14:05:42 administrateur CS

dans ce cas, force le reload.
myXML.load("file.php?"+Math.random());

signaler à un administrateur
Commentaire de hbakha2000 le 04/11/2006 14:36:05

elle n'a pas marchie

signaler à un administrateur
Commentaire de hbakha2000 le 07/11/2006 10:31:16

mon probleme resolu il faut ajout un script pour faire refresh de la page

signaler à un administrateur
Commentaire de kel solaar le 14/11/2006 18:37:33

excellent tutorial. Je comprenais pas grand chose à XML, maintenant, j'arrive à l'utiliser! merci bien :)

signaler à un administrateur
Commentaire de BlackWizzard le 15/11/2006 00:54:16 administrateur CS

J'ai eu le meme probleme au debut, impossible de comprendre comment ça fonctionnait, ça me semblait tellement complexe.
C'est pour ça que des que j'ai eu compris, j'ai ecrit un cours pour eviter ce genre de problemes aux autres developpeurs ;)

signaler à un administrateur
Commentaire de Al3XxX le 22/11/2006 17:19:43

Merci beaucoup BlackWizzard, ca marche :D

signaler à un administrateur
Commentaire de fredos06 le 08/01/2007 18:45:32

vraiment cool ce tuto,
par contre je voudrait savoir comment faire pour choisir le texte à afficher selon une zone défini
.
J'ai essayé avec montextfield.text = "texte:\t"+x.childNodes[i].childNodes[1].firstChild+"\n";
mais ça marche pas
d'ailleur il met automatiquement le 2eme noeud.
Si quelqu'un sais.
Merci bcp

signaler à un administrateur
Commentaire de Aloades le 27/01/2007 12:24:52

Coucou!
Vraiment bien ton tuto BlackWi'! Merci du temps que tu as passé pour des gens comme moi... novices en la matière!

J'aurai juste deux questions:
- J'aimerai savoir comme ça marche pour les polices d'écriture... ça se gère côté xml? Ou bien on peut dégérer cela côté Flash?
- Dans ton tuto, tu nous expliques comment soutirer des infos d'un fichier xml pour les mettre dans un fichier Flash, certes... mais l'inverse est-il aussi simple? J'aimerai en effet créer une sorte de "forum" sur Flash, et donc écrire un texte sur un interface Flash, le stocker dans un xml, puis pouvoir relire ces textes xml, dans une page Flash...
A moins que cela soit peut être un brin idiot?

Merci d'avance de m'éclairer...
Cordialement,
Aloades

signaler à un administrateur
Commentaire de BlackWizzard le 27/01/2007 15:26:17 administrateur CS

je comprend pas ta premiere question.
Pour la deuxieme, flash s'execute coté utilisateur, donc n'a pas acces à l'ecriture coté server. Tu doit donc passer par un script coté server qui ecrira le fichier (ou mieux, utilisera une base de donnée)
En general, flash appel un script qui ecrit dans une base de donnée pour sauvegarder les messages, et fait appel a un autre script qui lit la base de donnée et retourne un fichier xml lu par flash.

Il y a des exemples sur ce site, mais c'est d'un niveau assez elevé, surtout au niveau de la conception (sans parler de la programmation)

signaler à un administrateur
Commentaire de Ang3lo le 04/04/2007 14:28:43

Dans Flash 8 c'est
System.useCodepage = true; et non
System.UseCodePage = true;

;)

signaler à un administrateur
Commentaire de dalton05 le 08/04/2007 09:57:59

Ben moi je n'y arrive pas ; je suis p-e débile :s ... pourtant, je n'ai fait que du copier-coller :s j'ai repris le code posté qui se trouve dans le commentaire "BlackWizzard le 02/11/2006 16:18:15 " ici plus haut et également un copier-coller du xml de départ. résultat :

http://www.gaetan.eu/xmlessai.swf
http://www.gaetan.eu/file.xml
http://www.gaetan.eu/xmlessai.fla

(j'avais aussi mis une scrollbar avant ^^ mais on peut de tte façon constaté qu'il n'y a rien d'autres... vu qu'on peut 'scroller' avec la souris)

signaler à un administrateur
Commentaire de dalton05 le 08/04/2007 09:59:15

constater* autre* (fatigué :s)

signaler à un administrateur
Commentaire de BlackWizzard le 08/04/2007 22:23:06 administrateur CS

en effet... il manque le signe + devant chaque signe =

exemple:
montextfield.text = "--- NEWS "+(i+1)+" --- \n";
deviens
montextfield.text += "--- NEWS "+(i+1)+" --- \n";

sinon, ça n'ajoute pas au textfield, mais efface et re-ecrit par dessus...
j'avais precisé "(je n'ai pas testé, mais ça devrais fonctionner)" ;)

signaler à un administrateur
Commentaire de ploufplouf1 le 17/05/2007 02:03:36

Bonjour, bien le tuto sur l'XML mais j'ai intégré une playlist XML dans un lecteur MP3, tout fonctionne très bien, sauf quanf je fais appel à ce lecteur dans mon main=, là le lecteur me permet de choisir les noms de mes pistes (1er attribut) mais ne lance pas la lecture car ne prend pas l'attribut 2 en considération apparemment et revien sur mon message par defaut "sélectionner un morceau" (pour voir mon site : http://stecolson.ifrance.com/). Si vous trouvez une solution ce serait sympa car je cherche mais ne trouve pas.

signaler à un administrateur
Commentaire de BlackWizzard le 17/05/2007 16:12:21 administrateur CS

sans extrait de code, personne ne t'aidera...

signaler à un administrateur
Commentaire de mtb54 le 28/06/2007 10:26:35

bonjour, j ai un petit probleme avec ce tuto tip top . je veux afficher la liste des news . g nommé un textearea sur la scene mais je n ai que le premier champs qui s affiche "news 1" et voici mon code. Comment faut il faire pour avoir tout le contenu du fichier xml qui s affiche ? merci

System.useCodepage = true;
myXML = new XML();

myXML.ignoreWhite = true;

myXML.load("fichier.xml");

myXML.onLoad = function(flag) {

        if (flag) {

                i = 0;

                x = myXML.firstChild;

                while (x.childNodes[i] != undefined) {


                        montextfield.text += "--- NEWS "+(i+1)+" --- \n";

                        montextfield.text += "titre:\t"+x.childNodes[i].childNodes[0].attributes.value+"\n";

                        montextfield.text += "texte:\t"+x.childNodes[i].childNodes[1].firstChild+"\n";

                        montextfield.text += "liens: \n";

                        j = 0;

                        while (x.childNodes[i].childNodes[2].childNodes[j] != undefined) {

                                montextfield.text += "\t --- LIEN "+(j+1)+" --- \n";

                                montextfield.text += "\t lien:\t"+x.childNodes[i].childNodes[2].childNodes[j].attributes.url+"\n";

                                montextfield.text += "\t texte:\t"+x.childNodes[i].childNodes[2].childNodes[j].attributes.text+"\n";

                                j++;

                        }

                        i++;

                }

                

                montextfield.text += i+" news trouvées";

        }

};

signaler à un administrateur
Commentaire de rapor le 27/01/2008 09:41:33

bonjour,
j'ai lu et tester sauf que cela ne fonctionne pas chez moi, ma question: j'ai créer un menu dans un clip et des liens dans ce menu qui doivent faire appel au xml, chaque lien fait appel a un fichier xml, dois-je créer 1 image clé pour chaque bouton(avec lien xml) ou 1 image clé suffit pour y mettre tous les boutons ???
voikla le code que j'ai mis pour chaques boutons:
on (release) {
XMLmenu = new XML();
XMLmenu.ignoreWhite = true;
XMLmenu.load("playlistrapfr.xml");
}

signaler à un administrateur
Commentaire de h1fra le 30/01/2008 15:07:53

y a un truc que je saisi pas , pourquoi ne pas avoir continué le tuto jusqu'à l'affichage des news, parce qu'avec ça les débutants en xml (comme moi) sont bien avancés.

Perso, j'arrive pas à afficher rien pourtant c'est pas faute d'essayer.

signaler à un administrateur
Commentaire de omartssri le 10/07/2008 14:15:32

waw super c bien expliquer merci bcp je vais l'essayer !!

signaler à un administrateur
Commentaire de Laminico le 07/11/2008 12:01:00

Bonjour,
C'est carement la fête,
je voulais qu'une zone de texte affiche pseudo et commentaire proprement et c'est PRESQUE le cas : tout comme dans le 1er commentaire j'ai une mauvaise digestion de la ponctuation... ce qui est resté sans réponse.
J'ai du mal à croire qu'il soit impossible d'ajouter des données dans le xml depuis le flash...Si quelqu'un à un tutau magique je suis preneur, merci d'avance.

Un grand merci pour ce tutau et ses commentaires.

10/10

signaler à un administrateur
Commentaire de BlackWizzard le 07/11/2008 12:52:15 administrateur CS

Flash s'execute coté client, et ne peut donc acceder au fichier XML qu'en lecture, pas en ecriture.
Pour acceder au XML en ecriture, il faut avoir un cote coté server.
Et donc, pour acceder au xml en ecriture depuis flash, il faut passer par un script php.
Un simple fopen() fwrite() en php...

signaler à un administrateur
Commentaire de kevingraph le 05/12/2008 09:46:20

Super tuto il m'as fais oublier mes 2 semaines de galère.
Merci

signaler à un administrateur
Commentaire de kevingraph le 10/12/2008 14:01:02

Salut BlackWizzard,
Juste une petite question...
J'arrive bien à charger et à afficher mon fichier XML, mon seul problème est que j'ai un "undefined" qui s'affiche dans tous mes textFeilds je n'arrive pas à voir pourquoi.

myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("newser.xml");
myXML.onLoad = function(flag) {
if (flag) {
i = 0;
x = myXML.firstChild;
while (x.childNodes[i]) {
//trace("");
output += "\n ----------------------";
output += "\n"
output += x.childNodes[i].attributes.id;
//trace("liens:");
j = 0;
while (x.childNodes[i].childNodes[j]) {
output += "\n --- NEWS "+(j+1)+" ---";
output += "\n"+x.childNodes[i].childNodes[j].attributes.param1;
output += "\n"+x.childNodes[i].childNodes[j].attributes.param2;
output += "\n"+x.childNodes[i].childNodes[j].firstChild;
j++;
}
i++;
}
news_xml.text = output;

}
};
Merci de ta réponse.

signaler à un administrateur
Commentaire de BlackWizzard le 10/12/2008 14:35:20 administrateur CS

output n'est pas déclaré.
Tu commence directement par output += "\n ----------------------"; sans déclarer avant, donc ça sort en undefined.
met juste un "var output;" en début de fichier.

signaler à un administrateur
Commentaire de philippe_wfp le 25/01/2009 02:02:36

Salut et merci a toi BlackWizzard d'y voir un peu plus clair coté XML !
J'ai cependant une petite question (en bon debutant que je suis) un peu hors sujet mais tu me semble super bien placé pour m'aider sur ce point la. En faisant une petite appli utilisant du XML et un client Flash, je me suis rendu compte qu'il fallait absolument que mes paramètres de publication utilise comme lecteur FlashPlayer 7 ou ulterieur afin de pouvoir marcher correctement. Ce qui m'ampute de certaines fonctions graphiques (filtres et modes de fusions). Étant graphiste a la base cela me gène pas mal. Connais tu une alternative a ce problème ?
Pour info j'utilise Aquaserver et de l'AS2.
Merci d'avance, et désolé si je me suis trompé d'endroit pour poser ma question...

signaler à un administrateur
Commentaire de vegetalain le 10/02/2009 10:50:44

Hello BlackWizzard. super ce tuto xml et ça marche bien chez moi. Je l'affiche dans un champ texte sans souci, cela dit je l'ai réduit pour mes besoins :
2 types d'infos seulement...

- Le xml est comme ça :
<?xml version='1.0' encoding='UTF-8' ?>
<latotale>
  <machins>
    <title value="machin 1"/>
    <title value="descriptif 1"/>
  </machins>
  <machins>
    <title value="machin 2"/>
    <title value="descriptif 2"/>
  </machins>
</latotale>

- et coté flash, un champ multiligne appelé "zieutage":
nfo = new XML();nfo.ignoreWhite = true;nfo.load("file.txt");
nfo.onLoad = function(flag) {if (flag) {f = 0;x = nfo.firstChild;
while (x.childNodes[f] != undefined) {
zieutage.text +=x.childNodes[f].childNodes[0].attributes.value+"\n";
zieutage.text +=x.childNodes[f].childNodes[1].attributes.value+"\n";
zieutage.text +="\n";
f++;}
}};

J'aurais cependant une question, comment faire pour afficher les infos dans des champs séparés contenu dans des clips?
A force de bidouille j'arrive à aligner plusieurs clip contenant chacun 2 champs, et une image. Mon clip dupliqué contient un champ zetxt, un champ zenom et un clip zeimage...
Mon code est celui-ci :

//---------------
NCeAA = 28 //nbr de cel. à afficher
NCepCol = 5 //nbr max de cel par col.
LargBlc = 120 //Largeur du clip
HautBlc = 60 //Hauteur du clip
zeMargex = 10 //Marges droites
zeMargey = 10 //Marges hautes
coultext1 = "FFFF00" //Couleur du numéro
j = 0; //Colonne déjà affichées
while(j<(NCeAA/NCepCol)){
i = 0; //Cellules déjà affichées dans la colonne en cours
while((NCeAA>i+(NCepCol*j)) and (i<NCepCol)) {
duplicatemovieclip("preums", "deuz2"+i+j, this.getNextHighestDepth());
this["deuz2"+i+j]._x = zeMargex+(LargBlc*j);
this["deuz2"+i+j]._y = zeMargey+(HautBlc*i);
this["deuz2"+i+j].zeimage.loadMovie("images/"+this.getNextHighestDepth()+".jpg");
this["deuz2"+i+j].zetxt.htmlText = "<font color='#"+coultext1+"'>"+this.getNextHighestDepth()+"</font>";
// - ze texte interne
this["deuz2"+i+j].zenom.htmlText = "qsdf"; //<---- c là que le texte doit varier... mais je blok au niveau synthaxe
// - ze texte interne
i++;}j++;}
//---------------

... je n'arrive pas à combiner les deux c'est un peu l'embrouillage complet en fait...
Saurais-tu comment faire pour combiner les deux stp?... j'arrive à rien...
Merci de ta réponse et de ton tuto xml !!

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,109 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.