comment transformer un fichier xml en un tableau - XML/XSL - Programmation
Marsh Posté le 29-09-2005 à 20:02:33
Avec la plupart des parser XML de PHP, y'a des fonctions pour transformer un doc XML en un tableau d'objets, regarde du côté de la doc du parser que tu utilises
Marsh Posté le 30-09-2005 à 14:49:16
En fait j'utilise la fonction domxml_open_mem() qui transforme un fichier xml en un tableau mais j'ai des fichiers xml ou cette fonction affiche des erreurs(surtout les fichiers xml qui sont en langue chinoise)
Alors aurriez vous une idée sur comment je peux régler mon pb ...
merci
Marsh Posté le 30-09-2005 à 14:58:50
Quelle est l'erreur affichée (oublie pas qu'on n'est pas devin, et qu'il nous faut tout : extension utilisée, contenu des messages d'erreur, etc.) ?
Quel est l'encoding utilisé par le doc XML chinois ?
Marsh Posté le 30-09-2005 à 15:15:55
je suis désolé pour le manque de clarté :
en fait je traite des flux RSS(fichier xml) ...
mon programme fonctione bien avec les flux anglais , français ...
mais pour quelques flux chinois il m'affiche l'erreur suivant :
Warning: domxml_open_mem(): switching encoding: encoder error in ....
Effectivement je pense que ca peut bien être l'encoding qui pose pb. Enfait l'encoding de mon flux chinois qui pose pb est gb2312
j'espere que cette fois j'étais claire. et Merci encore pour la réponse.
Marsh Posté le 30-09-2005 à 15:33:48
Y'a pas plus pour le message d'erreur ? Y'a trois petits points là qui remplacent une partie de phrase qui pourrait être intéressante
Marsh Posté le 30-09-2005 à 15:41:42
non il ya plus rien(les tois points indique la ligne du programme ou se trouve l'erreure)
Mais si vous voulez j'ai une autre erreure sur le même flux qui peut vous permettre de m'aider :
cette erreur ce produi si j'essaie d'appliquer ma feuille xslt sur mon fichier xmi via la fonction xslt_process(). l'erreure est la suivante :
Warning: Sablotron error on line 1: illegal character for encoding 'gb2312' in ...
Marsh Posté le 30-09-2005 à 15:57:27
Ca veut dire qu'il y a, dans le fichier XML, un caractère non valide. Par exemple un caractère qui ne fait pas partie de l'encoding gb2312
Marsh Posté le 30-09-2005 à 16:04:57
oui souf que le contenu de la ligne 1 est :
<?xml version="1.0" encoding="gb2312" ?>
et je ne voie pas l'erreur je ne sais pas si vous voyer qqe chose.
Marsh Posté le 30-09-2005 à 16:29:59
En fait je développe en intranet ...
Mais si vous me donner votre email je vous envirrez le fichier en question
Marsh Posté le 30-09-2005 à 16:40:52
L'email est visible dans le profil
Sinon, comment est généré l'XML chinois ?
Marsh Posté le 30-09-2005 à 17:33:15
Bonne question
En fait le xml chinois est générer par :
je lis une page chinoise est je remplie mes balise xml par le contenu de ce site et tous ca est stocké dans une chaine de caractére et je fait afficher cette chaine.
Marsh Posté le 30-09-2005 à 17:33:55
je vaous ai envoyé le fichier xml sur votre adresse privé
Marsh Posté le 01-10-2005 à 11:10:34
Alors il fait effectivement plusieurs erreurs. Par contre, en ouvrant le fichier, et en le réenregistrant, ça fonctionne .
Assure-toi de bien convertir les chaînes lors de la création du doc.
Ceci par exemple ne fonctionne pas :
<?php |
Effectivement, j'ai un fichier unicode (utf-8), où je créer mon XML. Sauf que l'encoding de l'XML est censé être "gb2312", mais je lui met des caractères utf-8, d'où le problème.
Donc la solution est de convertir les caractères d'unicode vers gb2312 :
<?php |
Et là, ça fonctionne. Reste à voir maintenant comment tu lis la page chinoise, et de remplacer dans la fonction iconv 'utf-8' par l'encodage utilisé par la page chinoise...
Note : l'extension iconv doit être activée dans php.ini
Marsh Posté le 03-10-2005 à 11:22:50
merci beaucoup pour tes réponses, je suis vraiment persuadé que le pb vient de la, mais quand j'ai testé la fonction iconv n'est pas installé sur mon serveur, je vais essayer de l'installé et je te tiens au courant
Marsh Posté le 03-10-2005 à 12:33:26
J'ai installé la foction iconv.
Ce qui me pose encore pb ce que je ne vois pas les paramétres de cette fonction dans mon cas?
Le deuxiéme c'est l'encoding du site chinois.
Mais le premier(utf-8) ca corresponds à quel ecoding?
Marsh Posté le 04-10-2005 à 09:25:59
Le premier en fait, c'est l'encoding du site chinois. Le deuxième, c'est l'encoding "cible".
Donc quand tu récupères le site chinois, je me demande s'il ne traite pas ça en tant qu'iso-8859-1, d'où le problème
Marsh Posté le 04-10-2005 à 10:58:51
En fait le traitement que je fait de la page chinois est le suivant :
- je lis la page
- je recupére les éléménts qui m'interressent et je le stock dans une BD
- l'encoding de la base est utf-8
- je remplie mes balise xml à partire de la base
- l'encoding de mon fichier xml est l'encodage
de la page chinoise
Marsh Posté le 04-10-2005 à 11:32:52
Pourquoi ne gardes-tu pas l'utf-8 ? C'est 10 fois plus simple que de gérer 500 encoding ?
Marsh Posté le 04-10-2005 à 12:44:50
l'utf-8 je ne le modifie pas.
quand je fait iconv("gb2312","iso-8859-1",$chaine)
ca marche mais je perde tout les caractères chinois ...
vous pensez que ca vient de quoi??
Marsh Posté le 04-10-2005 à 12:50:41
Parce que l'iso-8859-1 ne possède pas de caractères chinois Donc utilise comme dans mon exemple :
iconv('utf-8', 'gb2312', $chaine); |
Si $chaine est en utf-8. Et je te recommande de garder l'utf-8...
Marsh Posté le 04-10-2005 à 13:06:17
j'ai testé mais je perde toujours les caractéres chinois ...
En fait $chaine je ne pense pas qu'elle soit vraiment en utf-8?
est ce que l'encoding de la BDD modifie l'encoding de son contenu?
Marsh Posté le 04-10-2005 à 13:52:12
L'encoding de la BDD ne joue pas trop. Si tu stockes une chaîne utf-8 (genre 'kapoué') dans une base iso-8859-1, elle sera stockée sous la forme 'kapoué'. Mais lors de la récupération, si tu l'affiches en tant qu'utf-8, elle sera bien affichée 'kapoué' .
Si $chaine n'est pas en utf-8... Bah faut trouver en quoi elle est Pour ainsi donner le bon paramètres à iconv...
Marsh Posté le 04-10-2005 à 16:28:10
$chaine est encodé en gb2312 (l'encoding de la page chinoise) ...
Marsh Posté le 04-10-2005 à 16:35:12
Donc normalement il ne devrait pas y avoir de conversion à faire
Marsh Posté le 04-10-2005 à 19:10:13
Alors quand j'ai testé le fichier XML, ça ne fonctionnait pas... Par contre, en le sauvegardant, ça a fonctionné. Je l'ai juste ouvert, et sauvegardé tout simple en spécifiant bien l'encoding...
Hum... Quand tu créer ton doc XML, est-ce que tu utilises des fonctions DOM ? Genre create_element, append_child, ou est-ce que tu utilises de la concaténation ?
Alors si tu utilises des méthodes DOM, faut procéder comme ça :
$xml =& domxml_new_doc("1.0" ); |
En fait, un doc XML ne peut que être fait avec de l'utf-8. Donc nécessité de créer le contenu des éléments en utf-8. Pis conversion lors de l'output.
Si tu utilises de la concaténation de chaîne, il faut alors faire :
$xml = iconv('iso-8859-1', 'gb2312', |
Donc là, ton fichier PHP est en iso-8859-1. Donc obligation de convertir ça en gb2312. Sauf pour la $chaine, qui est déjà en gb2312...
J'espère avoir bon cette fois-ci
Marsh Posté le 05-10-2005 à 10:21:43
C'est uhne bonne idée
Mais quand on fait
iconv('iso-8859-1', 'gb2312', '</element>');
la chaine </element> disparaisse !!!!
Donc je n'ai pas pu tester ce que tu m'a dit
Marsh Posté le 05-10-2005 à 10:32:21
Et sinon le début de l'xml (<?xml ...) y est ?
Marsh Posté le 05-10-2005 à 10:35:04
l'encoding du script??
si tu veux dire l'encoding de la page c'est gb2312 mais ca ne marche pas non plus avec une page d'encoding iso-8859-1!!!
Marsh Posté le 05-10-2005 à 10:36:51
non car j'essaie aussi de le transformer avec iconv est donc il s'éfface
Marsh Posté le 05-10-2005 à 10:38:41
Non, le script PHP. Ton éditeur de texte, il utilise quel encoding ?
Marsh Posté le 05-10-2005 à 10:41:20
mon editeur de texte c'est emacs, je vais essayer de voir quel encoding utilise
tu penses que l'editeur de texte ca joue?
Marsh Posté le 05-10-2005 à 10:42:15
Ouais, s'il encode ton fichier en iso-machin-truc, faut changer les iconv :
iconv('iso-machin-truc', 'gb2312', '</element>'); |
Marsh Posté le 05-10-2005 à 11:32:37
est ce que chez toi ca fonctionne??
quand tu fait iconv('iso-machin-truc', 'gb2312', '</element>');
ca t'affiche bien </element> ???
car l'encoding de mon emacs est iso-8859-1
quel éditeur de texte utilises tu?
Marsh Posté le 05-10-2005 à 13:04:11
est ce que tu as testé la fonction
iconv('iso-machin-truc', 'gb2312', '</element>'); ?
pour voir si le pb vient d'emacs.
Marsh Posté le 29-09-2005 à 16:26:15
Bonjour,
j'aimerais savoir s'il existe une fonction php qui permet de transformer un fichier xml en tableau