[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:
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:
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 :).