xml

Que pensez vous de ce tutorial XML

Résultats

xml

Écrit par Administrator Mardi, 07 Juin 2011 13:14

Langage xml

PDFImprimerEnvoyer

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

            foreach( $xml  as $element ) // lier sous forme de tableau les enfants du parent
            {
                        echo $element."<br />"; // affichager des noms des enfants
            }

?>

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. Content

  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. Coquin

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

            foreach( $xml->composant->entrer[4]->composant[2]  as $element )
            {
                        echo $element."<br />";
            }

Si vous n’avez pas indiqué le 2, il nous aurait donné une liste

Exemple :

            $xml = simplexml_load_file("exemple1.xml");
            foreach( $xml->composant->entrer[4]->composant as $element )
            {
                        echo $element."<br />";
            }

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 :

<?php
$xml = simplexml_load_file("exemple1.xml");
$key =0 ;// numéro de la case encours dans la boucle élèment3
            foreach( $xml as $element ) // lister les cartes mère mais
            {                                                                                 // il y en aura toujours qu'une
                        foreach( $element as $element1 ) // lister les entrées de la carte mère
                        {                                                                                            // alimentation, lecteurs, Processeur,
                                                                                                                      //Carte graphique ,Memoire vive
                                   if( trim($element1) == "Memoire vive"  )
                                   {
                                               foreach( $element1 as $element2 ) // lister seulement
                                               {                                                                                              // les barrettes de ram
                                                           foreach( $element2 as /*$key =>*/ $element3 )
                                                           {
                                                                       if( $key == 2)
                                                                       {
                                                                                  echo "key = ".$key." element3 =  ".$element3."<br />"; // afficher la capacité
                                                                                                                                                          // en case 2 et que nous
                                                                                                                                                         // voyons en 3
                                                                       }
                                                                       $key++;
                                                           }// liste les capacités
                                               }//lister les barettes
                                   }// condition qui filtre
                        } // bouler entrer carte mère
            }// lister les cartes mère
?>

Pour récupérer le nom des balises dans une boucle :

$xml = simplexml_load_file("exemple1.xml");

            foreach( $xml->composant->entrer[4]->composant as $element )
            {
                        echo $element->getName()."<br />";
            }

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 :

<?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("exemple1.xml");   // charger notre fichier xml en mémoire
             $pointeur->pointeAP("<capacite>128");                    // pointer sur la fin de mot (carte graphique)
             $pointeur->pointeAP("<capacite>128");                    // pointer sur la fin de mot suivant (1ere barrette)
             $pointeur->pointeAV("<capacite>128");                    // pointer au début du mot suivant (2eme barrette)
             $pointeur->pointeAV("128");             // pointer au début du mot
             $pointeur->saveMarker1();                                        // nous mémorisons la position
             $pointeur->pointeAP("128");              // pointer sur la fin de mot
             $pointeur->saveMarker2();                                        // nous mémorisons la position
             $pointeur->changeInterval("512"); // nous changeons sa capacité
             //$pointeur->save(); //nous sauvegardons les modifications
             echo nl2br($pointeur->affA());
?>

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. Sourire

Mise à jour le Dimanche, 12 Juin 2011 11:39