xml
Langage xml
Pré requis : connaitre un peu le html, le php avec wamp server et avoir au minimum une version php 5
Info: Ce tutorial a été fait en 2 parties
- 1ère partie
- Création des données xml au minimum
- Exploitation des données xml au minimum
- 2nd partie
- Création des données xml en situation réelle
- Exploitation des données xml en situation réelle
Le XML est un langage de balise.
Il doit toujours y avoir une balise d’ouverture et une balise de fermeture.
C’est la même façon que de voir les choses dans la syntaxe HTML sauf que cette <balise /> n’est plus autorisée.
Pour le reste nous sommes totalement libre de faire ce que nous voulons à partir du moment, où nous respectons la syntaxe dite de "parent enfant".
Exemple : (un parent avec 2 enfants qui s’appellent Paul et Pierre.)
<parent>
<enfant>Paul
</enfant>
<enfant>Pierre
</enfant>
</parent>
Le XML veut dire
En anglais
Extensible Markup Language
En français
Langage de balisage extensible
A partir de ce schéma, nous pouvons en inventer beaucoup.
Le stockage de données spécialisées d’un logiciel peuvent nous permettre de les réutiliser sur n’importe quelles autres applications voulant exploiter ces données.
Le fichier xml est un fichier txt avec une extention ".xml", il doit être enregistré avec un encodage de caractère UTF-8
Créons un exemple tout simple en reprenant l’exemple ci-dessus :
Récupérerons les infos avec la librairie SimpleXML déjà mise par défaut depuis la version php 5.
Et dans un dossier Wamp server, créer un fichier xml nommé le test.xml
Création des données XML
Pour un utilisateur notepad++
Ouvrir ce fichier et dans le menu de notepad++, cliquez sur
"Encoding" ou "encoder", puis "encode in utf-8" ou "encode en utf-8"
Maintenant vous pouvez enregistrer ceci :
<?xml version="1.0" encoding="UTF-8"?>
<parent>
<enfant>Paul
</enfant>
<enfant>Pierre
</enfant>
</parent>
Une fois votre fichier enregistré, nous allons passer au fichier php pour lire les prénoms des enfants.
Exploitation PHP des données XML
Dans le fichier php copier ceci :
<?php
$xml = simplexml_load_file("test.xml"); //Charger le fichier xml
?>
Exécuter votre fichier php et vous verrez s’afficher les prénoms des enfants.
Modifier les données XML
Tout va bien aller, jusqu'à ce que vous voudrez modifier les données du fichier xml, car simpleXML ne lit le XML que de façon très simple.
Normalement vous devez utiliser DomDocument, mais il n’est pas simple d'utilisation.
Afin de rester dans la simplicité, j’ai créé un code sous forme d’objet prévu pour rechercher un mot. Ce qui permettra ensuite l'insertion d'un mot avant ou après le mot rechercher ou tout simplement remplacer ce mot. Quand je parle de mot cela peut être aussi une phrase ou dans notre cas des balises.
Test de mise a en place : Testons ce code
Télécharger le fichier PHP à cette adresse :
http://www.dream3d-informatique.fr/telechargements/pointeurXML.zip
Ce qui va nous permettre de faire les modifications. Pour le moment, nous allons afficher le fichier.
Déziper et copier le dans votre dossier avec Wamp server prévu pour le test
Dans votre fichier php remplacer le code par celui-ci :
<?php
include "pointeurXML.php"; //On inclut à notre page php la possibilité
//de créer un objet à partir du modèle déjà créé
// nous facilitant le travail
$pointeur = new PointeurXML(); // création de l'objet
$pointeur->charge("test.xml"); // charger notre fichier xml en mémoire
echo $pointeur->affA(); // afficher le fichier
echo "<br /><br />Voici les enfants du parent : <br />";
$xml = simplexml_load_file("test.xml");
foreach( $xml as $element )
{
echo $element."<br />";
}
?>
Si tout ce passe bien vous devriez obtenir un peu prés ceci :
<?xml version="1.0" encoding="UTF-8"?> <parent> <enfant>Paul </enfant> <enfant>Pierre </enfant> </parent>
Voici les enfants du parent :
Paul
Pierre
Nous avons clairement notre fichier xml sans retour à la ligne.
( Si ça vous gène d'utiliser la fonction nl2br() pour afficher avec retour à la lignes
echo nl2br($pointeur->affA()); )
Modification
Nous allons maintenant changer le prénom de Pierre par Damien.
En premier nous analysons, quel mot l’identifie de façon à ce qu’il y n'a que lui qui change et pas un autre.
Ici il n'y en a qu’un, donc pas besoin de réfléchir.
Attention Faite une copie de votre test.xml car le code étant simplifié, il ne peut pas être exécuter 2 fois car Pierre ne sera plus trouvé vu qu'il a été remplacé par Damien
Si vous faite cette erreur vous aurez toujours la copie.
C’est plus simple.
Voici le code :
<?php
include "pointeurXML.php"; //On inclut à notre page php la possibilité
//de créer un objet à partir du modèle déjà créé
// nous facilite le travail
$pointeur = new PointeurXML(); // création de l'objet
$pointeur->charge("test.xml"); // charger notre fichier xml en mémoire
$pointeur->pointeAV("Pierre"); // pointer sur le début de mot
$pointeur->saveMarker1(); // nous mémorisons la position
$pointeur->pointeAP("Pierre"); // pointer sur la fin de mot
$pointeur->saveMarker2(); // nous mémorisons la position
$pointeur->changeInterval("Damien"); // nous changeons son prénom
$pointeur->save(); // nous sauvegardons les modifications
echo "<br />Voici les enfants du parent : <br />";
$xml = simplexml_load_file("test.xml");
foreach( $xml as $element )
{
echo $element."<br />";
}
echo "<br />affichage du fichier : <br /><br />";
$pointeur->charge("test.xml");
echo nl2br($pointeur->affA());
?>
Création et exploitation réelles
A mon avis à ce stade là, vous avez tout juste compris comment le xml fonctionne.
Mais vous êtes peut être encore trop hésitant pour créer votre propre fichier XML alors je vais vous montrer un exemple plus complet.
Avec l’exemple (grossièrement détaillé) qui va suivre un problème peut apparaitre.
Des balises identiques avec le même nom rendent le choix difficile :
RAPPEL : En programmation on compte à partir de 0, quand nous pensons 1 cela veut dire la case 0 et 2 donc la case1, ect…
Comment afficher la balise de même nature qu'une autre balise ayant le même contenu et que nous pourrons voir comme étant la 2ème (case 1) , sachant que l’ordinateur choisira par défaut la première balise demandée soit la case zéro ?
Création des données xml
Exemple XML avec en double les mots Cœur, DDR et 128 :
<?xml version="1.0" encoding="UTF-8"?>
<ordinateur>
<composant>carte mere
<entrer>alimentation
</entrer>
<entrer>lecteurs
</entrer>
<entrer>Processeur
<composant>Coeur
</composant>
<composant>Coeur
</composant>
</entrer>
<entrer>Carte graphique
<composant>DDR
<capacite>128
</capacite>
</composant>
<composant>Coeur
</composant>
</entrer>
<entrer>Memoire vive
<composant>DDR
<capacite>128
</capacite>
</composant>
<composant>DDR
<capacite>128
</capacite>
</composant>
<composant>DDR
<capacite>256
</capacite>
</composant>
</entrer>
</composant>
</ordinateur>
Exploitation PHP des données XML
Cherchons d’abord à afficher la capacité de la DDR numéro 3 qui a 256 de capacité
Si on part de 0 cela nous donne la 2ème case
$xml = simplexml_load_file("exemple1.xml");
Si vous n’avez pas indiqué le 2, il nous aurait donné une liste
Exemple :
Nous somme dans l’entrée 4 (vu que c’est la 4ème entrées en partant de 0) et il nous affiche nos 3 barrettes de ram.
Nous pouvons récupérer de manière différente les infos en passant par un système de plusieurs boucles foreach les une dans les autres.
Exemple :
Pour récupérer le nom des balises dans une boucle :
$xml = simplexml_load_file("exemple1.xml");
Voici un exemple pour changer la capacité de la 2ème barrette de ram
Alors que dans le fichier xml, il y a 2 capacités de 128 qui la devance :
- la capacité de la mémoire graphique à 128
- la 1ère barette de ram à 128
Pour ensuite arrivée à la 2ème barrette de 128, et là nous changeons sa capacité par 512
Voici l’exemple :
L’exemple qui va suivre, nous montre comment rajouter une barrette de ram.
Nous cherchons d’abord la fin ou le début du groupe de barrette de ram.
Ici nous n'avons pas le choix de choisir le début parce que </entrer> est répété trop de fois alors que <entrer> Memoire vive existe qu’une seule fois.
Et nous insérons les mêmes balises avec le contenu que nous voulons , moi j’ai mis 1024 histoire de bien différencier les valeurs !
Voila avec tout ce que nous avons vu.
J’arrive à créer et exploiter un fichier xml,
J’espère avoir été assez clair, dans tout les cas n’hésitez pas à donner votre avis et si des choses vous ont perturbés. Indiquez le sur le mini chat.