<?php
    $fichier = "http://www.phpfacile.com/exemples_live/fluxrss.rss";

    // Ma propre fonction de traitement des balises ouvrantes
    function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs)
    {
        // En fait... nous nous conteterons de mémoriser le nom de la balise
        // afin d'en tenir compte dans la fonction "fonctionTexte"

        global $derniereBaliseRencontree;

        $derniereBaliseRencontree = $nomBalise;
    }
   
    // Ma propre fonction de traitement des balises fermantes
    function fonctionBaliseFermante($parseur, $nomBalise)
    {
        global $derniereBaliseRencontree;
        global $titre;
        global $lien;

        switch ($nomBalise) {
            case "CHANNEL" :
                // nous quittons le bloc channel
                // nous pouvons afficher le titre de notre
                // liste de d'articles
                echo "<center><b>Les dernieres nouvelles issues de ".
                     "<a href=\"$lien\">$titre</a></b></center>";
                // Et on oublie     
                $titre = "";
                $lien = "";
                break;
            case "ITEM" :
                // nous quittons un bloc item
                // nous pouvons afficher le titre de l'article
                echo "- <a href=\"$lien\">$titre</a><br />";
                // et on oublie
                $titre = "";
                $lien = "";
                break;
        }
        
        // On oublie la dernière balise rencontrée
        // et tout le reste
        $derniereBaliseRencontree = "";
    }

    // Ma propre fonction de traitement du texte
    // qui est appelée par le "parseur"
    function fonctionTexte($parseur, $texte)
    {
        global $derniereBaliseRencontree;
        global $titre;
        global $lien;
        
        // Nous n'affichons pas le texte ou lien directement
        // nous attendrons de rencontrer la balise fermante
        // et ainsi d'avoir tous les éléments avant l'affichage.
        // ATTENTION: Par défaut les noms des balises sont
        //            mises en majuscules
        
        switch ($derniereBaliseRencontree) {
            case "TITLE": 
                $titre = $texte;
                break;
            case "LINK":
                $lien = $texte;
                break;
        }         
    }

    // Création du parseur XML
    $parseurXML = xml_parser_create();

    // Je précise le nom des fonctions à appeler
    // lorsque des balises ouvrantes ou fermantes sont rencontrées
    xml_set_element_handler($parseurXML, "fonctionBaliseOuvrante"
                                       , "fonctionBaliseFermante");

    // Je précise le nom de la fonction à appeler
    // lorsque du texte est rencontré
    xml_set_character_data_handler($parseurXML, "fonctionTexte");

    // Ouverture du fichier
    $fp = fopen($fichier, "r");
    if (!$fp) die("Impossible d'ouvrir le fichier XML");

    // Lecture ligne par ligne
    while ( $ligneXML = fgets($fp, 1024)) {
        // Analyse de la ligne
        // REM: feof($fp) retourne TRUE s'il s'agit de la dernière
        //      ligne du fichier.
        xml_parse($parseurXML, $ligneXML, feof($fp)) or
            die("Erreur XML");
    }
    
    xml_parser_free($parseurXML);
    fclose($fp);
?>
