IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[XML] Problème parser XML


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 108
    Points : 56
    Points
    56
    Par défaut [XML] Problème parser XML
    Bonjour à tous,
    Je viens de nouveau vers vous car je bloque au sujet d'un petit bout de parser xml que j'ai tenté de faire:

    Le problème vient des caractères spéciaux, et plus précisément à ce moment là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xml_set_character_data_handler($parseurXML, "fonctionTexte");
    Enfin bref, j'ai beaucoup de mal à m'expliquer, ne comprenant pas moi-même l'erreur, alors je vous présente une partie du code, une partie du fichier xml, et pour finir l'affichage:


    Tout d'abord, un petit bout de parser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     // Création du parseur XML
                $parseurXML = xml_parser_create("UTF-8");
     
                // 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 de parsage XML.");
                }
     
                // On libère le parseur
                xml_parser_free($parseurXML);
                // Et on arrête la lecture du fichier
                fclose($fp);
    La fonction qui récupère mon texte ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function fonctionTexte($parseur, $texte)
                {
                    global $derniereBaliseRencontree;
                    $texte = utf8_decode($texte);
                    // Selon les cas, nous affichons le texte
                    // ou nous proposons un lien
                    global $texteEntier;
                    //echo "Test: ".$derniereBaliseRencontree." Et le texte:".$texte;
                    // On cherche si on rencontre une balise, et si oui: ajouter du texte à la chaine.
                    switch ($derniereBaliseRencontree) {
                        case "IDAGENCE": 
                            echo "ID Agence: ".$texte."<br/>";
                            $texteEntier .= $texte;
                            break;
                        case "RAISONSOCIALEAGENCE":
                            echo "Raison Sociale Agence: ".$texte."<br/>";
                            $texteEntier .=  ";-;-;".$texte;
                            break; /* Suite du code */
    Une partie de mon fichier xml que je traite:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <annonces>
            <annonce>
                    <idAgence>100000001éé</idAgence> <!-- (identifiant interne unique de l'agence) -->
                    <raisonSocialeAgence>Rodécom SARL</raisonSocialeAgence> <!--  (string) -->
                    <enseigneAgence>Rodacom</enseigneAgence> <!--  (string) -->

    Et pour finir, l'affichage qui rate:
    ID Agence: 100000001
    ID Agence: éé
    Raison Sociale Agence: Rod
    Raison Sociale Agence: écom SARL
    Enseigne Agence: Rodacom
    On peut voir en fait, que dès qu'il y a un accent, il fait appel deux fois d'affilé à ma fonction qui récupère le texte ... Pourquoi ? Comment pallier à cela ? xD

    Je vous remercie d'avance pour toutes les réponses que vous pourriez m'offrir .

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 108
    Points : 56
    Points
    56
    Par défaut
    Bon, finalement, j'ai fait de la bidouille ^^.
    Je suis pas bien fier de moi, mais du moins ça marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function fonctionTexte($parseur, $texte)
                {
                    global $derniereBaliseRencontree;
                    global $baliseSauvegarde;
                    global $texteEntier;
     
                    if($baliseSauvegarde == $derniereBaliseRencontree){
     
                        $texteEntier .= $texte;
     
                    }else{
     
                        $baliseSauvegarde = $derniereBaliseRencontree;
                        $texte = utf8_decode($texte);
                        // Selon les cas, nous affichons le texte
                        // ou nous proposons un lien
                        // On cherche si on rencontre une balise, et si oui: ajouter du texte à la chaine.
                        switch ($derniereBaliseRencontree) {
                            case "IDAGENCE": 
                                echo "ID Agence: ".$texte."<br/>";
                                $texteEntier .= $texte;
                                break;
     
    /* Suite du code ... */

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    utilise SimpleXML

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 108
    Points : 56
    Points
    56
    Par défaut
    Merci . Il est certain que je dois vraiment passer à SimpleXML ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SAX] Problème Parser SAX - UTF-8
    Par Bogs dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 01/12/2008, 02h51
  2. Problème Parser XML
    Par vincent_17 dans le forum Spring
    Réponses: 1
    Dernier message: 27/05/2008, 15h22
  3. probléme Parser dtd
    Par bdptaki dans le forum Valider
    Réponses: 2
    Dernier message: 29/03/2008, 19h37
  4. [XML] [EXPAT] Problème parser XML EXPAT
    Par zan001 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 19/04/2007, 09h48
  5. Problème parser xml
    Par Akwel91 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 31/05/2006, 10h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo