Il faut observer la structure de notre fichier XML pour ne pas se perdre, comme ceci :
Code : XML1
2
3
4
5
6
7 | main -> contenu
objet -> attribut
nom -> contenu
description -> contenu
details -> attribut, attribut
fin objet
fin main
|
En détails, voici comment est structuré notre XML. Nous allons voir 2 fonctions simples,
childNodes[] et
firstChild.
childNodes précise sur quel
noeud on agit et
firstChild décrit le premier noeud.
childNodes[] agit comme un array, ainsi
childNodes[0] est identique à
firstChild. Maintenant, je vais tenter de vous expliquer
le plus gros morceau du tuto.
Un array est un sorte de tableau qui contient des informations. Il commence par 0. Donc 0 correspond au premier, 1 correspond au deuxième et ainsi de suite.
Code : Autre
==> Il n'y a qu'une seule paire de balises
<main>, donc 1 seul noeud dans le fichier.
==> On doit (obligatoirement) utiliser la variable
x pour simplifier.
==> x sera l'équivalent de la première balise du fichier (donc
<main>).
Code : Autre1
| x = Fichier_XML.firstChild //Correspond à la première balise du fichier: <main> |
Si vous avez suivi, vous savez que l'on peut mettre aussi :
Code : Autre1
| x = Fichier_XML.childNodes[0]//Correspond à la première balise du fichier: <main> |
Mais mettre le premier exemple est plus propre, surtout lorsque l'on aura beaucoup de noeuds.
Donc pour simplifier les choses, on va dire que
firstChild sera là pour afficher et
childNodes[] pour passer à un autre noeud.
Pour afficher le contenu de
<nom>, on va lire la première balise à l'intérieur de
<main> (
<objet>) et la première à l'intérieur de <objet> (
<nom>).
Je précise que quand je dis première balise, je parle de balise ouverte.
Rappelez-vous du schéma que l'on a fait au début du chapitre.
Code : XML1
2
3
4
5
6
7 | main -> contenu
objet -> attribut
nom -> contenu
description -> contenu
details -> attribut, attribut
fin objet
fin main
|
Chaque espace veut dire qu'il appartient à la balise supérieure, ainsi :
<details>,
<description> et
<nom> appartiennent à
<objet> qui
appartient à
<main>, qui
lui-même appartient au fichier.
Je me répète, mais c'est pour que vous compreniez bien le principe.
<main>(variable x) contient la balise
<objet> (
x.childNodes[0]).
<objet> qui contient
<nom> (
x.childNodes[0].childNodes[0]) cette balise contient du texte ; pour l'afficher, on doit donc utiliser un dernière fois
childNodes[0] ou
firstChild. Pour distinguer si on entre dans un noeud ou si on va lire du texte, je recommande la fonction
firstChild. Le code pour lire le contenu de la balise
<nom> est donc :
Code : Autre1
2
| Voir_xml = x.childNodes[0].childNodes[0].firstChild
/* On lit la première balise de <main>; <main> qui lit sa première balise (<objet>); <objet> qui va lire sa première balise. Enfin, pour afficher le texte, on utilise firstChild */ |
Mais bien sûr on peut remplacer le
.firstChild par
.childNodes[0].
Code : Autre1
| Voir_xml = x.childNodes[0].childNodes[0].childNodes[0] |
N'hésitez pas à relire si vous ne comprenez pas. Le résultat doit être
Potion +50. Mais si vous voulez afficher
Bouclier aquatique, comment faire ? Je vous laisse y réfléchir. Pensez bien aux balises qui en contiennent d'autres.
Avant d'afficher le secret, lisez cela.
Code : Autre1
2
3
4
5
| Voir_xml = x.firstChild;
/* Affichera le contenu des balises <nom> et <description> car en écrivant cela, j'affiche le contenu de la première balise de <main> (toujours représentée par "x"), c'està-dire <objet>.
Code similaire */
Voir_xml = x.childNodes[0]; |
Code : Autre1
2
| Voir_xml = x;
/* Identique au code supérieur sauf qu'on affiche les balises (et leur contenu) qui se trouve dans <main>. |
Bah, pourquoi on ne marque pas Voir_xml = x; et fini ! ça sera plus simple et plus court que de faire des tonnes de lignes pour afficher les informations une par une.
En fait, quand vous faites comme ça, vous n'avez ni retour à la ligne, ni code structuré comme vous le désirez. Si vous voulez afficher les informations dans l'ordre que vous voulez, ou encore si vous ne voulez pas tout afficher, vous ne pourrez pas avec cette méthode. En gros, cela ne sert à rien.
Pourquoi tu nous l'a montré, alors ?
Tout simplement pour que vous compreniez le principe ;).
Réponse à la question "
Comment afficher Bouclier aquatique"
(vous avez réfléchi, j'espère).
Secret (cliquez pour afficher)Pour afficher le nom du 3
e objet, il faut penser comme ceci.
Le texte, le contenu
est représenté par firstChild.
<nom> première balise de
<objet> (childNodes[0]).
<objet>
3e balise de
<main> (
childNodes[2] [2 car
childNodes[] commence a 0]).
Code : Autre1
| Voir_xml = x.childNodes[2].childNodes[0].firstChild |
Voilà : si on réfléchit un peu, c'est très simple. Si vous avez compris cela, vous avez tout compris. Allez, plus que 3 parties et le XML n'aura plus de secret pour vous.
Précisions : quand vous pensez aux textes d'une balise, c'est que vous pouvez mettre
firstChild. Pour le reste, utilisez les
childNodes[]. Vous saurez ainsi mieux vous repérer.