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à:
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part xml_set_character_data_handler($parseurXML, "fonctionTexte");
Tout d'abord, un petit bout de parser:
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
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);
Une partie de mon fichier xml que je traite:
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 */
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:
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 ? xDID Agence: 100000001
ID Agence: éé
Raison Sociale Agence: Rod
Raison Sociale Agence: écom SARL
Enseigne Agence: Rodacom
Je vous remercie d'avance pour toutes les réponses que vous pourriez m'offrir .
Partager