CrazyCat Programming Factory
rendre internet plus accessible
 

Parseur XML simplifié

Logo phpCette classe présente l'avantage de pouvoir être utilisée à partir du PHP 3 et son fonctionnement est très simple.
<?
class XMLparser {
   // --- Classe XML Parser ---
   // Rôle: Analyse d'un fichier XML
   // Fonctionnalité par défaut: RSS

   function XMLparser($xmltype="RSS") {
      // -- Constructeur du parseur
      switch($xmltype) {
         // Cette partie permet de pré-enregistrer des types de flux
         case "RSS":
            $this->root = "channel"; // Non utilisé à l'heure actuelle
            $this->node = "item"; // Séparateur de chaque item
            $this->fieldname = Array("title", "link", "description", "category", "pubDate", "author");
            // Tableau des champs à prendre
         break;
            case "newsML":
            $this->root = "";
            $this->node = "article";
            $this->fieldname = Array("idarticle", "medaillon", "titre", "chapeau", "corps");
         break;
      }
   }

   function XMLretrieve($xmlfile) {
      // -- Lecture du flux (local ou distant)
      $myxml = fopen($xmlfile, "r");
      while (!feof($myxml)) {
         $this->xml .= fgets($myxml, 4096);
      }
      fclose($myxml);
   }

   function XMLnodesplit() {
      // -- Split du XML en un tableau d'objets
      // Renvoit un tableau de la forme:
      // Array[Item_n°] = Array(champ1, champ2, ..., champN)
      $pattern = "@<".$this->node.">(.*)<\/".$this->node.">@Usi";
      preg_match_all($pattern, $this->xml, $matches, PREG_SET_ORDER);
      $i = 0;
      foreach($matches as $tmp_item) {
         $this->datas[$i] = $tmp_item[0];
         foreach($this->fieldname as $balise) {
             $this->XMLextract($balise, $i);
         }
         $i++;
      }
   }

   function XMLextract($string, $level=0) {
      // -- Transformation des objets en tableaux de strings
      $pattern = "@<".$string.">(.*)<\/".$string.">@si";
      preg_match($pattern, $this->datas[$level], $matches);
      $this->field[$level][$string] = $matches[1];
   }

}
?>

Exemple d'utilisation avec le fil RSS de ce site:
<?
$test = new XMLparser();
$test->XMLretrieve("http://www.c-p-f.org/rss.php");
$test->XMLnodesplit();
for ($i = 0; $i<count($test->field); $i++) {
   foreach ($test->fieldname as $balise) {
       echo "<b>$balise</b>: ".$test->field[$i][$balise]."\n";
   }
   echo "<hr />\n";
}
?>

©2006-2019 Geek Zone | eggdrop.fr | zeolia.net