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 !

TUTORIEL COMPLET XML


Information sur la source

Catégorie :Tutoriaux Niveau : Débutant Date de création : 13/10/2003 Vu : 31 275

Note :
9,03 / 10 - par 32 personnes
9,03 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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


Description

Voici un tutoriel complet sur l'utilisation du xml dans flash.
 

Source

  • Pour expliquer comment utiliser le xml dans flash, je vais prendre un exemple concret.
  • Nous apprendre a exploiter un fichier xml en prenant comme exemple un systeme de news fictif.
  • Nous ne realiserons que l'exploitation des donnée, pas le systeme lui meme.
  • L'affichage se fera via la fonction trace().
  • Je part sur le principe que vous connaissez les fonctions de base 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 specifier un header. si il n'y en a pas, flash va quand meme le charger, mais ce header permet de preciser 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.0 existe pour l'instant ;)
  • encoding='UTF-8' determine l'encodage du fichier.
  • UTF-8 est le plus utilisé, mais il existe une multitude d'encodages possibles.
  • UTF-8 est le codage 'europeen'. Il est celui utilsé dans les pays utilisant notre alphabet.
  • Il existes d'autres encodage tel que windows-1252, ISO-8859-1, UTF-16 ...
  • Apres le header, nous voyons que les Balises sont mis entre une paire de balise <main></main> que l'on appele balises "root".
  • quelque soit le document xml, Tout le document doit etre encadré ce cette pair de balise.
  • Le nom de cette paire balise n'as 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 px accueillir des parametres, exemple, <nom parametre="valeur"></nom> ou <nom parametre="valeur" />.
  • Les balises uniques ne servent uniquement a accueillir des parametres.
  • Pour fournir un texte complet, mettez le entre une paire de balises, mais attention! si votre texte se compose de code html, les balises html seront considérés comme des balises xml, ce qui entrainera souvent une erreur.
  • Pour eviter cela, Vous pouvez placer votre texte entre les pseudo-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 interpreté.
  • Maintenant que vous possedez les bases syntaxiques du XML, nous allons commencer le code action-script.
  • Pour exploiter du xml, nous devons declarer un nouvel objet XML:
  • myXML = new XML();
  • Nous voulons que les espaces et sauts de lignes ne soient pas interpretés (ce qui est preferable, sinon ça fout le bordel), pour cela, nous disposont 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 en focntion de sa taille et de la conenction, nous allons faire intervenir la fonction onLoad() qui executera son code des que le xml est chargé. Cette fonction recoit un argument de type booleen (1 ou 0; true ou false) qui correpond a l'etat de chargement; true(1) = le document est chargé, false(0) = le document n'est pas chargé, probablement indisponible ou en erreur:
  • myXML.onLoad = function(flag) {
  • if (flag) { // si flag = true
  • // reste du code.
  • }
  • }
  • Maintenant que nous savons composer et charger un document XML, il faut l'analyser.
  • Pour cela, Nous allons parcourir les "branches" du fichier, qui comme tt le monde a du le remarquer se compose comme une arborescence.
  • Pour cela, nous allons utiliser une boucle while(), bien qu'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'espere qu'il est assez clair pour tt le monde.
  • Afin de parcourir le fichier, nous disposons de 2 fonctions principales:
  • xml.firstChild et xml.childNodes[x].
  • xml.firstChild retourne la premiere "branche" du noeud "xml".
  • xml.childNodes[x] retourne le noeud "x" du noeud "xml", sinon il retourne "undefined" si la valeur le noeud "x" n'est pas trouvé.
  • xml.firstChild equivaut donc à xml.childNodes[0].
  • 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 un trace(myXML);
  • Donc, afin d'isoler les sections de news, nous pouvons faire trace(myXML.firstChild); qui va nous retourner uniquement les zones de news.
  • Etant donnée que le nombre de news est dynamique, nous allons 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 incremente le compteur.
  • }
  • trace(i+" news trouvées"); // on affiche le nombre de news trouvé, c'est pas utile
  • // pour ce tutoriel, mais c'est un plus ;)
  • Voila!
  • Nous avons commencé a parcourir le fichier!
  • Si vous avez compris le bout de code ci-dessus, vous avez tout compris du xml, ou presque.
  • Mais afin de faire un tutoriel complet, je vais aller jusqu'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 focntion, il faut voir les specificités du xml; En effet, nous avons 2 facons pour stocker du texte:
  • - entre une paire de balise: <nom>texte</nom>
  • - dans une balise: <nom attr="texte" />
  • Pour acceder au premier type (la paire de balise), un simple firstChild suffit.
  • Par contre, pour acceder a la balise elle meme, nous devons utiliser noeud_xml.attributes.nom_attribut
  • Exemple :
  • Pour <link url="http://www.allboard.net" text="Allboard Network" />
  • Pour acceder a la valeur de "url", nous allons faire noeud_xml.attributes.url
  • et pour acceder a la valeur de "texte" noeud_xml.attributes.text
  • Voici donc le code complet qui permet d'explorer le fichier xml.
  • Vous disposez maintenant de toutes les notions necéssaires pour 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 desormais vous servir du xml, qui est si pratique avec flash!
  • Un conseil, avant de coder, regardez bien la structure du xml, si elle est complexe, faites le shema simplifié comme on a fait, et distinguez bien les elements statiques (titre, texte toujours au meme nombre et à la meme place) des elements dynamiques (souvent a la meme place, mais rarement au meme nombre).
  • Amusez vous bien!
  • Je resume le code complet ::
  • 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");
  • }
  • };
  • Ce tutoriel à été ecrit par BlackWizzard pour Flashkod.
  • Diffusion autorisé a la seul condition de laisser mon pseudo en signature.
Pour expliquer comment utiliser le xml dans flash, je vais prendre un exemple concret.
Nous apprendre a exploiter un fichier xml en prenant comme exemple un systeme de news fictif.
Nous ne realiserons que l'exploitation des donnée, pas le systeme lui meme.
L'affichage se fera via la fonction trace().

Je part sur le principe que vous connaissez les fonctions de base 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 specifier un header. si il n'y en a pas, flash va quand meme le charger, mais ce header permet de preciser 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.0 existe pour l'instant ;)

encoding='UTF-8' determine l'encodage du fichier.
UTF-8 est le plus utilisé, mais il existe une multitude d'encodages possibles.
UTF-8 est le codage 'europeen'. Il est celui utilsé dans les pays utilisant notre alphabet.
Il existes d'autres encodage tel que windows-1252, ISO-8859-1, UTF-16 ...

Apres le header, nous voyons que les Balises sont mis entre une paire de balise <main></main> que l'on appele balises "root".
quelque soit le document xml, Tout le document doit etre encadré ce cette pair de balise.
Le nom de cette paire balise n'as 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 px accueillir des parametres, exemple, <nom parametre="valeur"></nom> ou <nom parametre="valeur" />.
Les balises uniques ne servent uniquement a accueillir des parametres.
Pour fournir un texte complet, mettez le entre une paire de balises, mais attention! si votre texte se compose de code html, les balises html seront considérés comme des balises xml, ce qui entrainera souvent une erreur.
Pour eviter cela, Vous pouvez placer votre texte entre les pseudo-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 interpreté.


Maintenant que vous possedez les bases syntaxiques du XML, nous allons commencer le code action-script.

Pour exploiter du xml, nous devons declarer un nouvel objet XML:
	myXML = new XML();

Nous voulons que les espaces et sauts de lignes ne soient pas interpretés (ce qui est preferable, sinon ça fout le bordel), pour cela, nous disposont 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 en focntion de sa taille et de la conenction, nous allons faire intervenir la fonction onLoad() qui executera son code des que le xml est chargé. Cette fonction recoit un argument de type booleen (1 ou 0; true ou false) qui correpond a l'etat de chargement; true(1) = le document est chargé, false(0) = le document n'est pas chargé, probablement indisponible ou en erreur:
	myXML.onLoad = function(flag) {
	  if (flag) { // si flag = true
	    // reste du code.
	  }
	}

Maintenant que nous savons composer et charger un document XML, il faut l'analyser.
Pour cela, Nous allons parcourir les "branches" du fichier, qui comme tt le monde a du le remarquer se compose comme une arborescence.
Pour cela, nous allons utiliser une boucle while(), bien qu'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'espere qu'il est assez clair pour tt le monde.

Afin de parcourir le fichier, nous disposons de 2 fonctions principales:
xml.firstChild et xml.childNodes[x].
xml.firstChild retourne la premiere "branche" du noeud "xml".
xml.childNodes[x] retourne le noeud "x" du noeud "xml", sinon il retourne "undefined" si la valeur le noeud "x" n'est pas trouvé.
xml.firstChild equivaut donc à xml.childNodes[0].

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 un trace(myXML);
Donc, afin d'isoler les sections de news, nous pouvons faire trace(myXML.firstChild); qui va nous retourner uniquement les zones de news.

Etant donnée que le nombre de news est dynamique, nous allons 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 incremente le compteur.
	}
	trace(i+" news trouvées"); 	// on affiche le nombre de news trouvé, c'est pas utile
					// pour ce tutoriel, mais c'est un plus ;)

Voila!
Nous avons commencé a parcourir le fichier!
Si vous avez compris le bout de code ci-dessus, vous avez tout compris du xml, ou presque.

Mais afin de faire un tutoriel complet, je vais aller jusqu'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 focntion, il faut voir les specificités du xml; En effet, nous avons 2 facons pour stocker du texte: 
- entre une paire de balise: <nom>texte</nom> 
- dans une balise: <nom attr="texte" />
Pour acceder au premier type (la paire de balise), un simple firstChild suffit.
Par contre, pour acceder a la balise elle meme, nous devons utiliser noeud_xml.attributes.nom_attribut
Exemple :
Pour <link url="http://www.allboard.net" text="Allboard Network" />
Pour acceder a la valeur de "url", nous allons faire noeud_xml.attributes.url
et pour acceder a la valeur de "texte" noeud_xml.attributes.text

Voici donc le code complet qui permet d'explorer le fichier xml.
Vous disposez maintenant de toutes les notions necéssaires pour 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 desormais vous servir du xml, qui est si pratique avec flash!
Un conseil, avant de coder, regardez bien la structure du xml, si elle est complexe, faites le shema simplifié comme on a fait, et distinguez bien les elements statiques (titre, texte toujours au meme nombre et à la meme place) des elements dynamiques (souvent a la meme place, mais rarement au meme nombre).

Amusez vous bien!


Je resume le code complet ::

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");
	}
};


Ce tutoriel à été ecrit par BlackWizzard pour Flashkod.
Diffusion autorisé a la seul condition de laisser mon pseudo en signature.

Commentaires et avis

signaler à un administrateur
Commentaire de top30 le 13/10/2003 19:15:29

Pour ceux qui comprendrait pas le mot "flag" dans le onLoad du XML... Je penses que "succes" est plus simple car cela sous entend :

...load("file.xml");
myXML.onLoad = function(SUCCES) {
  if (SUCCES) {
    i = 0;
etc....

Encore bravo pour ton courage... ; )  &gt; 6/10 !

signaler à un administrateur
Commentaire de BlackWizzard le 13/10/2003 19:27:37 administrateur CS

thx :)
j'ai mis 2 jours a le faire, mais separé par plus de 3 semaines lol
mais je l'ai enfin publié :)

signaler à un administrateur
Commentaire de afad le 14/10/2003 00:29:44

Sacré boulot BlackWizzard (9/10 pour pas mettre 10 ;-), ça tombe bien, je me remet un peu dans le bain pour ressortir une version XML de mon Mediaplayer afAd : http://www.flashkod.com/code.aspx?ID=14162, ya plein de gens qui souhaitent l'utiliser, autant le rendre autonome ;-)

a+
afaD

signaler à un administrateur
Commentaire de righton le 14/10/2003 00:54:06

Super tut !
Pouet ! ;)

signaler à un administrateur
Commentaire de afad le 14/10/2003 01:13:57

Oupss, j'avais oublié, on fête la 700ième source (officiel)  de Flashkod, Champagne pour tout le monde. Encore un petit effort et on survole JavascriptFr et PHPcs pour finir 3ème du CS. :-))

signaler à un administrateur
Commentaire de righton le 14/10/2003 01:48:11

ouais à ce propos, un grand merci aux wally et autres sans qui ça aurait été impossible !

;)

signaler à un administrateur
Commentaire de top30 le 14/10/2003 13:06:57

Trop fort Righton... Car sous l'ironie se cache une part de vérité  = )  Mème si je supporte pas les sources de ce pauvre Wally qui essaie de participer tant bien que Mal...

signaler à un administrateur
Commentaire de Wally57 le 15/10/2003 12:30:50

                       ||||||||||||||          On parle dans mon dos ?
                       |               |          |
                     @   (0)  (0) /@      &lt;|
                         |       &gt;  |
                                0  /
                           \_____/

signaler à un administrateur
Commentaire de righton le 19/10/2003 18:40:51

quel talent !

signaler à un administrateur
Commentaire de buff@lofluo le 06/02/2004 11:08:43

Merci bcp pour ton tutorial très bien detaillé et clair grace a toi jai compris comment sa marche.

signaler à un administrateur
Commentaire de rtgiman le 19/02/2004 21:19:30

j'ai cherché un truc comme ça pendant un sacré bout de temps, j'ai poser des questions à des gens qui m'ont répondu en chinois et ça a pris des plombes, alors que finalement,  c'est tout simple.

Merci.

signaler à un administrateur
Commentaire de Queja le 17/03/2004 10:52:22

Merci, super 10/10

petite info:
les caractères spéciaux sont traités correctement avec xml, donc ne pas utiliser system.usecode=true;

signaler à un administrateur
Commentaire de ronan972 le 13/05/2004 06:00:12


en + :http://www.flashkod.com/code.aspx?ID=22768

sinon merci pour cette introduction 7/10

signaler à un administrateur
Commentaire de flavioabreu le 06/10/2004 15:35:39

Salut,

Super ce tutorial, vraiment top ;o) J'ai cherché pas mal de temps une explication comme celle-ci et là, bravo j'ai tout compris.

Par contre une question reste ouverte (ou alors j'ai pas bien compris) : comment insérer les news ensuite dans une case texte (Dynamic text)

Merci pour votre réponse ;o)

signaler à un administrateur
Commentaire de BlackWizzard le 06/10/2004 15:43:39 administrateur CS

Si ton champs de text dynamique a pour instance 'tf':

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) {
      tf.htmlText += ("--- NEWS "+(i+1)+" ---");
      tf.htmlText += ("<b>"+x.childNodes[i].childNodes[0].attributes.value+"</b>");
      tf.htmlText += ("<i>"+x.childNodes[i].childNodes[1].firstChild+"</i>");
      tf.htmlText += ("<u>liens:</u>");
      j = 0;
      while (x.childNodes[i].childNodes[2].childNodes[j] != undefined) {
        tf.htmlText += ("\t --- LIEN "+(j+1)+" ---");
        tf.htmlText += ("<a href=\""+x.childNodes[i].childNodes[2].childNodes[j].attributes.url+"\">"+x.childNodes[i].childNodes[2].childNodes[j].attributes.text+"</a>");
        j++;
      }
      tf.htmlText += "<br><br>";
      i++;
    }
    tf.htmlText += ("<br><br>"+i+" news trouvées");
  }
};

ecrit en live, pas testé, mais je pense que ça devrait fonctionner...

signaler à un administrateur
Commentaire de BananaTree le 03/11/2004 18:30:11

slt BW. j'avais vu ce tuto sur flashkod, et j'avais rien capté.
je viens de le voir sur ton blog, et là c'est le jour et la nuit. bravo (Ce qui se présente bien se comprend aisément)
mon dernier post ds le forum sur le html à du faire marrer pas mal de monde, mais si j'avais trouvé un tuto identique avec l'ensemble des methodes et des propriétés xml présentées et commentées, j'aurais mis une source, au lieu d'un post.

donc si qq connait un site avec la présentation complette du tandem xml/flash , ou un bouquin, merci d'avance.

signaler à un administrateur
Commentaire de BlackWizzard le 07/11/2004 23:01:04 administrateur CS

pour savoir gerer flash/xml, pas compliqué, ce tutor explik les 3/4, apres matte la reference des fonctions de l'object XML dans la doc flash de macromedia, et si tu vx completer: colin moock, carlo blatz (cherche sur amazon)

signaler à un administrateur
Commentaire de BananaTree le 07/11/2004 23:44:27

super cool,
merci

signaler à un administrateur
Commentaire de thanae19 le 21/12/2004 11:38:58

Super!
Un gran merci, si j'avais pu avoir un tutoriel pareil pour ASP où là on m'a répondu aussi en chinois comme pour rtgiman.
Ici au moin j'ai compris directe.

Thanae19

signaler à un administrateur
Commentaire de Draconagi le 21/01/2005 12:13:42

SUPER! BlackWizzard grâce à toi j'ai pu apprendre pas mal.
Tes tutoriaux sont géniaux.
Merci et bonne continuation.

signaler à un administrateur
Commentaire de deneus le 04/02/2005 14:28:26

Cool ton truc BW ;)
Mais pour la gestion du chinois sa marche pas :(

Enfin tu a qasiement fait la meme chose que ce sur quoi je bosse, et chez moi, je doit le faire en plusieurs langues, dont le chinois.
Et tout marche sauf sa ...
Le probleme viendrais soit de l xml qui ne gererait pas chinois (enfin apprament en utulisant encoding="ISO-8859-1" c est sensé etre interpreter corectement) mais dans le flash a part des points d'interogations... il n y a rien.
Si quelqu un a une idée, je suis open
Merci

signaler à un administrateur
Commentaire de BlackWizzard le 04/02/2005 22:36:12 administrateur CS

dans flash, tu a inclus une police qui gere le chinois?

signaler à un administrateur
Commentaire de deneus le 05/02/2005 00:14:00

Ben j ai essayer tout les "caracteres" proposer par le menu de flash MX mais y a rien a faire, sa n affiche que des points d'interogations.
Si j ouvre le fichier XML avec wordpad, ls caracterer chinois d affichent corectement.... mais une fois dans flash sa passe pas :(

Si tu as une idée, ou que tu pense a un module quil fodrai ajouter avec macromedia Exchange...

signaler à un administrateur
Commentaire de snakeeater1 le 11/02/2005 14:52:00

je comprend pas la... quand je charge un texte écrit dans les CDATA ou même entre 2 balise, flash ne veut pas m'afficher lé "é" ou "è" ou encore "à" .
Une solution dans la salle ?

signaler à un administrateur
Commentaire de snakeeater1 le 11/02/2005 15:30:48

autre question comment fait-on pour que des balise html de lien écrite dans un cdata soient convertie en lien ds le textfield de flash pake moi lorsque je charge mon fichier xml ds un textfield ( en ayant fait mon_textfield.html = true; ) et bien il m'écrit mes balise mais ne me les transforme pas en html il me les écrit normalement !!!!

signaler à un administrateur
Commentaire de BlackWizzard le 11/02/2005 16:20:07 administrateur CS

Pour les accents:
System.useCodepage = true;

Pour les liens, meme si ton textfield est en html = true, il faut utiliser tf.htmlText = "<a href=\"blah.html\">blablabla</a>"; et non pas tf.text = ...

signaler à un administrateur
Commentaire de snakeeater1 le 11/02/2005 17:41:34

ok merci

mais pour le tf.htmlText c'est raté lorsque je load le cdata d'un noeud qui comporte les balise d'un lien y me le transforme pas en lien...

signaler à un administrateur
Commentaire de snakeeater1 le 11/02/2005 17:42:53

en plus il ne me prend même pas les balises <br> ou <b> ou rien du tout de mon cdata.... pige pas la...

signaler à un administrateur
Commentaire de deneus le 11/02/2005 19:33:35

Alors pour les caractere chinois a partir d un XMl ( je reponds moi meme a ma question ), il faut mettre dans le xml encode="UTF-8"

et si vous utilisez " System.useCodepage = true; "
tous les caractere ne s afficheront pas.

moi pour mon appli en 15 langues, jai utilser l'encodage UTF-8 et "System.useCodepage = true ;" et sa marche impec

et pour les balise dans du XML , j ai lu qu on pouvait appliquer du CSS a partir du XML.. enfin c est a creusé et c est des sources fr.
bonne continuations tout le monde

signaler à un administrateur
Commentaire de BlackWizzard le 11/02/2005 21:42:29 administrateur CS

Pour les balises en CDATA, je me souvient que ça ne fonctionne pas... les "<" sont mis en "&lt;".
Du coup, il faut les retransformer.
Pour ça, va voir ma source rssReader, dans le code il y a une fonction pour retransformer en html.

signaler à un administrateur
Commentaire de thanae19 le 12/02/2005 11:13:15

Bonjour à tous,
J'ai aussi eu du mal pour trouver la solution, mais après plus rechercher et test j'ai trouver, en tout cas dans mon cas.
Dans mon fichier XML j'ai introduit la déclaration suivante:
<!DOCTYPE main
[
<!ELEMENT lesujet (titre, texte)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT texte (#PCDATA)>
]>
Mais il faut que le texte dans l'élément commence absolument par une balise html, sinon ca fait des erreurs.
Ensuite pour les éléments qui n'en ont pas il faut indiquer:
<texte><![CDATA[...blabla...]</texte>

Voila, en tous cas pour moi ca fonctionne bien comme ca.
Enfin j'espere que ca pourra aider.

signaler à un administrateur
Commentaire de snakeeater1 le 13/02/2005 12:31:19

ba c'est sa que je comprend pas c'est pas qu'il m'affiche des "&lt;" ou des truc du genre il m'affiche bien mes balise style <a> <b> ...  mais il me les met en tant que texte normal et ne me les "utilise" pas !

signaler à un administrateur
Commentaire de deneus le 13/02/2005 15:36:14

si le browser t affiche des &lt, essaye de remplacer dans ton fichier les "<" par "&lt"et ">" par "&gt"  ...
sa devrait ptet passer ...
enfin j ai jms utiliser de code html dans mon xml... donc je peu pas t aider plus que sa

signaler à un administrateur
Commentaire de ArChYY le 14/02/2005 14:11:54

Super se tuto.

Comment insérer les news ensuite dans une case texte (Dynamic text) ?

Suis noob

signaler à un administrateur
Commentaire de BlackWizzard le 14/02/2005 19:02:18 administrateur CS

ya le code dans les commentaires (date: 06/10/2004 15:43:39)
Sinon regardes mes autres cours sur ce site.

signaler à un administrateur
Commentaire de Dinofly le 22/03/2005 10:23:52

Salut,

Quelqu'un sait-il s'il est possible de valider un fichier XML par rapport à une DTD en Flash ?
J'ai cherché et je n'ai rien trouvé, ça me paraît tellement improbable qu'un langage aussi répandu que Flash n'implémente pas cette fonctionnalité que je vous pose quand même la question.

Merci d'avance.

signaler à un administrateur
Commentaire de ombr0 le 10/05/2005 13:31:11

Merci pour ce bon tuto sa fait plaisir !!

signaler à un administrateur
Commentaire de YopSolo le 04/01/2006 22:44:59

Dinofly >> le parseur XML de flash n'est pas validant.

signaler à un administrateur
Commentaire de alencredetesyeux le 09/02/2006 13:40:43

bonjour tout le monde
et merci a toi blackwizzard.....

J'aurais une petite question par apport a ce tuto .
voila ,j'aurais aimé faire en sorte a ce que des que je clic sur un
bouton , celui ci aille sur une autre news .

j'ai essayé :

btn_dream.onRelease = function() {
news1_txt.htmlText += (i+1);
news1_txt.htmlText += (j+1);
};
Mais ca ne passe pas .
dois remetre le code en entier (a par la parie new xml=.. load .. )
pour chaque  NEWS ?

sinon , j'aurais une autre petite question ?
quelles seraient les raison pour qu'un fichier CSS soit pris en compte une fois sur deux ?

Merci encore pour tout
Et merci a toi black la majoritée de tes tuto mon été très utile .
;-)

signaler à un administrateur
Commentaire de BlackWizzard le 09/02/2006 23:42:35 administrateur CS

Concernant ton bouton, c'est un probleme de ciblage.
Essai de debuger en ajouter trace(i); pour voir si la variable "i" existe (si elle a une valeur, elle existe, sinon tu aura "undefined").
Tu peut egalement verifier le type de ta variable: trace(typeOf(i));
Le plus simple est d'utiliser le chemin complet de la variable: _root.i par exemple. Il y a des solutions plus propres mais aussi plus complexes, donc commence par ça pour tester, tu verra les variables globales et le reste plus tard ;)

signaler à un administrateur
Commentaire de alencredetesyeux le 10/02/2006 09:58:40

Ok ... je vais voir ca de ce pas ....

Je te remercie ...

MIC

signaler à un administrateur
Commentaire de alencredetesyeux le 10/02/2006 10:55:21

La variable "i" existe bien .


myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("fichier.xml");
myXML.onLoad = function(succes) {
if (succes) {
i = 0;
x = myXML.firstChild;
while (x.childNodes[i] != undefined) {
news1_txt.htmlText += ("");
news1_txt.htmlText += ("NEWS "+(i+1)+" :\n");
news1_txt.htmlText += ("\n titre:"+x.childNodes[i].childNodes[0].attributes.value);
news1_txt.htmlText += ("\n texte:"+x.childNodes[i].childNodes[1].firstChild);
news1_txt.htmlText += ("\n liens: aucun lien pour le moment");
j = 0;
while (x.childNodes[i].childNodes[2].childNodes[j] != undefined) {
news1_txt.htmlText += ("\n LIEN "+(j+1)+" :\n");
news1_txt.htmlText += (" \n lien:"+x.childNodes[i].childNodes[2].childNodes[j].attributes.url);
news1_txt.htmlText += ("\n texte:"+x.childNodes[i].childNodes[2].childNodes[j].attributes.text);
j++;
}
i++;
}
news1_txt.htmlText += ("");
news1_txt.htmlText += (i+" news trouvées");
}
};
_root.btn_dream.onRelease = function() {
news1_txt.htmlText += (i+1);

};



( j'ai mis deux news sur le xml  )
Des que je le lance il m'affiche la news 1
et quand je clic sur le bouton , il me r'ajoute la valeur de "i"+1
soit (2)a la suite de la news 1.

NEWS 1 :

titre:Flash MX
texte:Flash MX est un tres bon logiciel...
liens: aucun lien pour le moment
LIEN 1 :

lien:http://www.allboard.net
texte:Allboard Network
LIEN 2 :

lien:http://www.blackwizzard.com
texte:BlackWizzard  NetWork
LIEN 3 :

lien:http://www.underground-fr.com
texte:Underground-fr1 news trouvées2

Ce que j'aurais souhaité c'est de faire en sorte a ce que la news 1
disparaisse pour laisser aparaitre la news 2 et ainsi de suite pour les autres futur news .

Désolé si mes questions vous semble tres basic mais , je debute depuis peut .

Merci encore pour tout

MIC



signaler à un administrateur
Commentaire de BlackWizzard le 10/02/2006 11:08:06 administrateur CS

envoi ton fla par mail, je le corrige et je le publis en plus de ce cours.

signaler à un administrateur
Commentaire de makfly78 le 06/04/2006 19:32:28

Merci pour ce petit cours trés clair.
Avec sa, va faire des merveilles.
tcho

signaler à un administrateur
Commentaire de Julio001 le 08/11/2006 17:38:00

Félicitation BlackWizzard, ce tutoriel est vraiment très bien !!
Par contre, j'ai un petit problème avec le HTML, je l'ai activé mais il ne semble pas être entièrement pris en compte. Jai mis "tf.html = true;" et ça semble correct puisque les balises n'apparaîsse pas et les sauts de ligne se font, les <br /> sont pris en compte. Mais quand j'essaye de faire un lien ou de mettre le texte en bold ça ne marche pas... les balises <a>,<b>,<i> et <u> ne fonctionne pas et je ne comprend pas pourquoi.
J'utilise Flash 8 et action script 2.0  pourtant.
Quelqu'un peut me dire comment règler ce problème ?

signaler à un administrateur
Commentaire de BlackWizzard le 08/11/2006 20:36:10 administrateur CS

faudrais voir ton code html...
flash ne supporte que le XHTML strict.

signaler à un administrateur
Commentaire de YopSolo le 08/11/2006 22:30:24

le truk "bête"
tf.html = true << ok c bien mais ensuite tu affecte bien a tf.htmlText = "<b>du blablabla gras</b>" ?

signaler à un administrateur
Commentaire de Julio001 le 08/11/2006 22:57:54

Merci pour votre aide aussi rapide !!
Là où y a des balises oui, je mettais tf.htmlText = ...
mais à une place ou c'était du texte simple j'avais laissé tf.Text = ...
je croyais pas que ça causerais de problème mais il semble que oui, ça entre en conflis ou je ne sais pas pour quel raison flash désactive le html à ce moment là.

signaler à un administrateur
Commentaire de aerandil le 19/11/2006 15:06:04

Merci pour ce tuto,

j'avais rien compris au fonctionnement du XML en flash pendant les cours :p
Mais là c'est clair et net, je vais faire tourner ce lien, il pourrait être utile à pas mal de mes camarades ;)
En tout cas bravo.

10/10

signaler à un administrateur
Commentaire de BlackWizzard le 19/11/2006 15:40:05 administrateur CS

en cours? c'est quoi tes etudes?

signaler à un administrateur
Commentaire de aerandil le 19/11/2006 16:12:24

DUT Service et Réseau de Communication

Mais la prof à un peu du mal à nous expliquer clairement des fois :p

signaler à un administrateur
Commentaire de BlackWizzard le 19/11/2006 17:53:23 administrateur CS

j'avais hesité à faire ça... mais trop de math, trop de sciences, et trop scolaire dans l'ensemble... du moins c'est l'impression que j'en ai eu.
Sinon, c'est bien comme etudes?

signaler à un administrateur
Commentaire de janetdream le 16/12/2006 02:32:27

Tout marche à merveille et merci pour ce tuto qui enfin vaut la peine qu'on y prète attention.

Maintenant ma question est : comment faire pour intégrer des images. J'imagine que c'est quelque chose comme : tf.htmlText += ("<img src=\""+x.childNodes[i].childNodes[2].childNodes[j].attributes.img+"\">"+x.childNodes[i].childNodes[2].childNodes[j].attributes.text+"</img>");
        j++;
      }

Si vous avez une idée précise sur le sujet... Merci ;)

Et pendant qu'on y est pour intégrer des liens sur des images :D

signaler à un administrateur
Commentaire de janetdream le 16/12/2006 05:27:35

J'ai essayer aussi d'ajouter la dâte pour chaque news mais sans succés...

Coté xml :

<date value="15-12-06" />

signaler à un administrateur
Commentaire de janetdream le 16/12/2006 05:54:14

C'est bon j'ai réussis pour la dâte !

Coté xml :

<?xml version='1.0' encoding='UTF-8' ?>
<main>
  
  <news>
  <date value="15-12-06" />
     <title value="Enjoy Numero 1 !" />
    <texte>
      <![CDATA[Personne ne s'y attendait et pourtant ! Enjoy qui etait recement 24eme se retrouve 1er sur les charts Japonnais !!! Une agreable nouvelle qui donne le sourire a plus d'un fan...]]>
    </texte>
    <links>
      <link url="http://www.j-wave.co.jp/original/tokiohot100/" text="Source." />
    </links>
  </news>
  <news>
  <date value="15-12-06" />
    <title value="Janet-Design Happy Birthday !!!" />
    <texte>
      <![CDATA[ 1an d'anniversaire pour Janet Dream/Design. Un an pendant lequel mon site n'a eut de cesse de soutenir Janet dans son retour. J'espere de tout mon coeur voir Janet reussir en 2007.]]>
    </texte>  
<links>
      <link url="http://www.janet-design.com" text="Pas de source." />
    </links>
  </news>
  
</main>

coté AS :

System.useCodepage = true ;
myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("http://janet-design.com/xml/news1.xml");
myXML.onLoad = function(flag) {
  if (flag) {
    i = 0;
    x = myXML.firstChild;
    while (x.childNodes[i] != undefined) {
  tf.html = true;
      tf.htmlText += (x.childNodes[i].childNodes[0].attributes.value);
       tf.htmlText += ("<b>"+x.childNodes[i].childNodes[1].attributes.value+"</b>");
   tf.htmlText += (x.childNodes[i].childNodes[2].firstChild);
      j = 0;
while (x.childNodes[i].childNodes[2].childNodes[j] != undefined) {
        
        tf.htmlText += ("<i><a href=\""+x.childNodes[i].childNodes[3].childNodes[j].attributes.url+"\">