Parseur

Invité
Invité n'ayant pas de compte PHPfrance

12 sept. 2006, 15:50

Bonjour,
j'essaye de parser un fichier XML pour l'integrer dans ma base de donner par la suite. J'ai trouver un tutorial la dessus mais je suis un peu perdu aux niveaux des balise XML et faire le lien avec PHP.

Voici le code utilise :
    $fichier = "http://www.communicate.vg/prnewswire/1431287.xml";

    // 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)
    {
        // On oublie la dernière balise rencontrée
        global $derniereBaliseRencontree;

        $derniereBaliseRencontree = "";
    }

    // Ma propre fonction de traitement du texte
    // qui est appelée par le "parseur"
    function fonctionTexte($parseur, $texte)
    {
        global $derniereBaliseRencontree;
        
        // Selon les cas, nous affichons le texte
        // ou nous proposons un lien
        // ATTENTION: Par défaut les noms des balises sont
        //            mises en majuscules
        
        switch ($derniereBaliseRencontree) {
            case "P": 
                echo $texte;
                break;
            case "P":
                echo ":<a href=\"$texte\">L'article complet</a><br />";
                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);
Dans mon fichier XML, j'ai un element <BLOCK> dans lequel se trouve plusieurs element <P> qui forme le texte.
Le probleme c'est que je n'arrive pas a sortir uniquement l'element <BODY> donc le texte avec les saut de ligne (balise P). Il ne me prend juste que les balise P et donc qund je veux l'inserer dans la base il ne m'integre qu'ine balise P sur un champ et ainsi de suite au lieu de les regrouper pour en former un champ complet.


Pas tres clair hein!!!
j'ai un peu de mal a m'y retrouver mais j'essaye d'avancer si jamais vous aviez une petite lumiere a suivre..

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 sept. 2006, 23:48

Y a pas un loupé là ? :)
   switch ($derniereBaliseRencontree) { 
            case "P":  
                echo $texte; 
                break; 
            case "P": 
                echo ":<a href=\"$texte\">L'article complet</a><br />"; 
                break; 
        }          

Invité
Invité n'ayant pas de compte PHPfrance

13 sept. 2006, 08:37

Ben je sais mais si je pose
switch ($derniereBaliseRencontree) { 
            case "BLOCK":  
                echo $texte; 
                break; 
            case "P": 
                echo ":<a href=\"$texte\">L'article complet</a><br />"; 
                break; 
        }
Ca ne marche pas alors qu'avec la fonction d'avant il m'affiche le texte.
Ca peux aider si je pose le fichier XML pour comprendre les balises

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 sept. 2006, 09:55

Et pourquoi ne pas utiliser la balise BODY puisque c'est ce que tu sembles vouloir récupérer ?

Montre nous la structure d'un de tes fichiers xml, ca sera effectivement plus simple :)

Invité
Invité n'ayant pas de compte PHPfrance

13 sept. 2006, 16:41

Salut peux tu mettre le code complet de ton script pour parser la page xml


dont notament

function fonctionBaliseOuvrante
function fonctionBaliseFermante
function fonctionTexte