Lecture d'un fichier XML avec un parseur

  Information

Code simple qui vous aidera à la lecture d'un fichier XML. Vous y trouverez un exemple réduit d'un fichier XML, le parseur qui sert à lire le fichier XML placé sur le serveur, et pour terminer l'apel de la fonction avec l'affichage des données du fichier XML.

Si vous désirez limiter l'entrée du flux :

Remplacez la ligne suivante (ligne 25)

for($i=1;$i < sizeof($tmp)-1;$i+=2)

par ces 2 lignes avec $nb qui est le nombre de champs à afficher. Attention la valeur doit etre obligatoirement impaire car le pas est de 2 et commence à 1 (1,3,5,7,9,11...)

$nb = 15; // la valeur doit etre impaire
for($i=1;$i<$nb;$i+=2)

  code source classé dans  XML

 
 01    
 02    
 03    
 04    
 05    
 06    
 07    
 08    
 09    
 10    
 11    
 12    
 13    
 14    
 15    
 16    
 17    
 18    
 19    
 20    
 21    
 22    
 23    
 24    
 25    
 26    
 27    
 28    
 29    
 30    
 31    
 32    
 33    
 34    
 35    
 36    
 37    
 38    
                               
<?php
/*---------------------------------------------------------------*/
/*
    Titre : Lecture d'un fichier XML avec un parseur                                                                      
                                                                                                                          
    URL   : https://phpsources.net/code_s.php?id=172
    Date édition     : 03 Juin 2006                                                                                       
    Date mise à jour : 26 Sept 2019                                                                                      
    Rapport de la maj:                                                                                                    
    - fonctionnement du code vérifié                                                                                    
*/
/*---------------------------------------------------------------*/

    // FONCTION qui va lire le fichier XML et le placer dans un tableau
    // Cette fonction sert de parseur

    function lit_xml($fichier,$item,$champs) {
      // on lit le fichier
      if($chaine = @implode("",@file($fichier))) {
         // on explode sur <item>
         // Dans l'exemple il s'agit de 'profil'
         $tmp preg_split("/<\/?".$item.">/",$chaine);
         // pour chaque <item> donc tous les profils
         for($i=1;$i<sizeof($tmp)-1;$i+=2)
            
   // on lit les champs demandés <champ> donc il s'agit de 'id' et 'prenom'
            foreach($champs as $champ) {
               $tmp2 preg_split("/<\/?".$champ.">/",$tmp[$i]);
               // on ajoute l'élément au tableau
               $tmp3[$i-1][] = @$tmp2[1];
            }
         // et on retourne le tableau dans la fonction
         return $tmp3;
      }
    }
?>

Exemple :

 
 01    
 02    
 03    
 04    
 05    
 06    
 07    
 08    
 09    
 10    
 11    
 12    
 13    
 14    
 15    
 16    
 17    
 18    
 19    
 20    
 21    
 22    
 23    
 24    
 25    
 26    
 27    
 28    
 29    
 30    
 31    
 32    
 33    
 34    
                                
<?php

    // Partons d'un exemple simple et trés classique
    // Imaginons 1 fichier XML avec 2 éléments, 'id' et 'prenom'
    // L'item principal est 'profil'

    /*
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    - <XML_EXEMPLE>
    - <profil>
      <id>200</id>
      <prenom>Koogi</prenom>
      </profil>
    </XML_EXEMPLE>
    */

// Lecture du FLUX XML sur le serveur
$xml lit_xml("http://www.site.com/flux.xml","profil",array("id","prenom"));

     // Une petite boucle suffit pour retrouver les élément du tableau
     // retourné dans la fonction lit_xml()
     foreach($xml as $row) {

       echo $row[0];
       // affiche 200
       echo $row[1];
       // affiche Koogi

       }

     // Et voilà ;)
?>

          Fonctions du code - Doc officielle PHP

   php.net   Description Versions PHP OUTIL
   array Crée un tableau PHP 4, PHP 5, PHP 7, PHP 8
   echo Affiche une chaîne de caractères PHP 4, PHP 5, PHP 7, PHP 8
   file Lit le fichier et renvoie le résultat dans un tableau PHP 4, PHP 5, PHP 7, PHP 8
   implode Rassemble les éléments d'un tableau en une chaîne PHP 4, PHP 5, PHP 7, PHP 8
   preg_split Éclate une chaîne par expression rationnelle PHP 4, PHP 5, PHP 7, PHP 8
   return Retourne le controle du programme au module appelant. PHP 4, PHP 5, PHP 7, PHP 8
   sizeof Alias de count() PHP 4, PHP 5, PHP 7, PHP 8

   Dites merci aux auteurs pour leurs travail, ça ne coûte rien et ça fait toujours plaisir wink

[18]

  • avatar

    Invité

    27 Sept 2019 à 18:51

    C'est déjà le cas, ce code lit un flux XML a partir d'un fichier : $xml = lit_xml("http://www.site.com/flux.xml","profil",array("id","prenom"));

  • avatar

    Invité

    26 Juil 2011 à 22:11

    svp comment peut on parser un flux xml via un fichier http
    et merci d'avance

  • avatar

    Invité

    14 Avril 2011 à 13:03

    à partir de PHP est-ce que tu peux modifier le xml et ajouté des nodes ou même supprimer? Je n'y arrive pas.

  • avatar

    Invité

    17 Jan 2011 à 16:26

    MERCI MERCI BBEAUCOUUUUUUUUP

  • avatar

    Invité

    17 Fév 2010 à 03:05

    Ma contribution qui réunis sur la fonction => avec ou sans limiteur de flux en sortie
      function lit_xml($fichier,$nb,$item,$champs){
         // on lit le fichier
         if($chaine = @implode('',@file($fichier))){
            // on explode sur <item> Dans l'exemple il s'agit de 'profil'
            $tmp = preg_split('/<\/?'.$item.'>/',$chaine);
            // pour chaque <item> donc tous les profils
              if(empty($nb)){// Si $nb n'est pas renseigné on envoi tout le xml
                      for($i=1;$i < sizeof($tmp)-1;$i+=2){// On ne désire pas limiter le flux à l'affichage
                         foreach($champs as $champ){// on lit les champs demandés <champ>
                            $tmp2 = preg_split("/<\/?".$champ.">/",$tmp[$i]);
                            // on ajoute l'élément au tableau
                            $tmp3[$i-1][] = @$tmp2[1];
                         }// fin - on lit les champs demandés <champ>
                       }// fin - // On ne désire pas limiter le flux à l'affichage
                }else{// $nb est renseigné, on renvoi le nb exact en sortie, la valeur doit etre impaire car le pas est de 2 et commence à 1 (1,3,5,7,9,11...)
                      for($i=1;$i<$nb;$i+=2){// On désire limiter le flux à l'affichage
                         foreach($champs as $champ){// on lit les champs demandés <champ>
                            $tmp2 = preg_split("/<\/?".$champ.">/",$tmp[$i]);
                            // on ajoute l'élément au tableau
                            $tmp3[$i-1][] = @$tmp2[1];
                         }// fin - on lit les champs demandés <champ>
                       }// fin - On désire limiter le flux à l'affichage
              }// fin - si $nb pas renseigné / est renseigné
            // et on retourne le tableau dans la fonction
            return $tmp3;
         }
         return false;
      }
      // Maintenant, deux exemples pour utiliser la fonction modifiée:
      // Lecture du FLUX XML sur le serveur "sans limiter le flux"
      $xml = lit_xml('http://www.site.fr/sitemap.xml','','url',array('loc'));
     
      // Lecture du FLUX XML sur le serveur "en limitant le flux"
      $xml = lit_xml('http://www.site.fr/sitemap.xml','15','url',array('loc'));
     
    En éspèrant qu'elle sera utile, bonne prog :)

  • avatar

    Invité

    17 Fév 2010 à 02:18

    Ouep bonne source :)

  • avatar

    Invité

    05 Jan 2010 à 15:37

    Merci beaucoup, une jounrée de recherche avec des mega code qui font même pas le café et enfin je tombe sur un script supra simple et qui marche du 1er coup.

  • avatar

    Invité

    08 Fév 2009 à 02:11

    Bonjour,
    Je cherche comme oobox à lire (en php4) un rss youtube mais je n'y arrive pas.
    l'exemple de code est ok pour lire les valeus simples mais impossible de lire les balises media du flux : as-tu trouvé comment faire ?

  • avatar

    Invité

    19 Déc 2008 à 14:38

    Je n'arrive pas ç afficher les champs contenu dans les cdata, comment faire please???

  • avatar

    Invité

    03 Déc 2008 à 00:31

    salut, j'ai une anime de diapo en flash qui appel un fichier .xml ou ou ce trouve les urls des images.
    Le problème c'est que j'ai mes url dans une une base sql, donc comment indiquer la variable php $url(qui contient l'url de l'image récuper dans ma base) dans mon fichier .xml?
    merci

  • avatar

    Brahimhackman

    28 Aout 2008 à 16:06

    C'est un très bon code mais est ce qu'on peut enregistrer des information a partir de mysql ?

  • avatar

    Brahimhackman

    28 Aout 2008 à 16:06

    c'est un très bon article mais est ce qu'on peut enregistrer des information a partir de mysql ?
    Merci

  • avatar

    Hebone

    26 Aout 2008 à 16:57

    bonjour,

    félicitation pour ces bouts de codes.

    je souhaite savoir comment limiter le nombre de résultats renvoyés par le fichier rss qui contient les infos ?

    merci

  • avatar

    Lionel35

    13 Avril 2008 à 11:43

    Salut KOogar,


    J'aimerai pouvoir enregistrer dans une base de données Mysql : "ID" et "prenom".

    Que faut-il rajouter en code après ton script ?

    je découvre le PHP Mysql et j'avoue être un peu perdu.

    Merci si tu me viens en aide.

    Lionel

  • avatar

    Oobox

    21 Mars 2008 à 00:55

    Bonjour,

    Comment extraire d'un fichier XML une balise du type :
    la valeur de viewCount et url de media:thumbnail ?

    'channel'
    'item'
    'media:group'
    'media:thumbnail url='http://img/1.jpg/'
    '/media:group'
    media:statistics viewCount='3507548'
    '/item'
    '/channel'

    ps : pour voir le code j'ai indique des ' a la place des < et >

  • avatar

    Sana

    20 Mars 2008 à 13:39

    j'aimerai bein voir un exemple où il y a xml ,mysql ,javascipt
    merci becoup
    à me répondre

  • avatar

    Nicococo

    18 Déc 2007 à 18:31

    un champ < ! [ CDATA[ 194AUT]] >

  • avatar

    Nicococo

    18 Déc 2007 à 18:31

    Merci beaucoup ca me sert bien ce ptit bout de code, par contre comment faire lorsque le xml contient un champ

Présentation de PHP

PHP débutant et initié 50 Tutoriel

Présentation de MySQL