Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML
XML Forum d'entraide sur XML avec PHP. Exemples : SimpleXML, OpenXML... Avant de poster -> FAQ XML, Cours XML et Sources XML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/09/2011, 15h53   #1
Membre à l'essai
 
Homme F. Mithieux
Étudiant
Inscription : juin 2008
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme F. Mithieux
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 99
Points : 20
Points : 20
Par défaut 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 :
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 :
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 :
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 :
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:
Citation:
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 .
Arget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 10h16   #2
Membre à l'essai
 
Homme F. Mithieux
Étudiant
Inscription : juin 2008
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme F. Mithieux
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 99
Points : 20
Points : 20
Bon, finalement, j'ai fait de la bidouille ^^.
Je suis pas bien fier de moi, mais du moins ça marche.

Code :
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 ... */
Arget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 10h27   #3
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 486
Points : 8 486
utilise SimpleXML
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 11h01   #4
Membre à l'essai
 
Homme F. Mithieux
Étudiant
Inscription : juin 2008
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme F. Mithieux
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 99
Points : 20
Points : 20
Merci . Il est certain que je dois vraiment passer à SimpleXML ^^
Arget est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h44.


 
 
 
 
Partenaires

Hébergement Web