comment transformer un fichier xml en un tableau

comment transformer un fichier xml en un tableau - XML/XSL - Programmation

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

Reply

Marsh Posté le 29-09-2005 à 16:26:15   

Reply

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

Reply

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

Reply

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 ?

Reply

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.
 

Reply

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 [:dawa]

Reply

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 ...

Reply

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 :(

Reply

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.

Reply

Marsh Posté le 30-09-2005 à 16:05:49    

T'aurait un lien vers le fichier XML pour voir ?

Reply

Marsh Posté le 30-09-2005 à 16:05:49   

Reply

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

Reply

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 ?

Reply

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.

Reply

Marsh Posté le 30-09-2005 à 17:33:55    

je vaous ai envoyé le fichier xml sur votre adresse privé

Reply

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 [:le kneu].
 
Assure-toi de bien convertir les chaînes lors de la création du doc.
 
Ceci par exemple ne fonctionne pas :

<?php
 
  $xml =
    '<?xml version="1.0" encoding="gb2312" ?>
    <pouet>鳛鳛鳛</pouet>';
 
  $dom =& domxml_open_mem($xml);
 
?>


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
 
  $xml =
    '<?xml version="1.0" encoding="gb2312" ?>
    <pouet>' . iconv('utf-8', 'gb2312', '鳛鳛鳛') . '</pouet>';
 
 
  $dom =& domxml_open_mem($xml);
 
?>


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

Reply

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

Reply

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?

Reply

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 :(

Reply

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

Reply

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 ?

Reply

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??

Reply

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...

Reply

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?

Reply

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é' [:johneh].
 
Si $chaine n'est pas en utf-8... Bah faut trouver en quoi elle est :D Pour ainsi donner le bon paramètres à iconv...

Reply

Marsh Posté le 04-10-2005 à 16:28:10    

$chaine est encodé en gb2312 (l'encoding de la page chinoise) ...

Reply

Marsh Posté le 04-10-2005 à 16:35:12    

Donc normalement il ne devrait pas y avoir de conversion à faire :??:

Reply

Marsh Posté le 04-10-2005 à 18:12:38    

Alors d'ou est ce que peut venir mon pb?
 

Reply

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" );
 
$element =& $xml->create_element('element');
$xml->append_child($element);
 
$xml->set_content(iconv('gb2312', 'utf-8', $chaine));
 
echo $xml->dump_mem(true, 'gb2312');


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',  
'<?xml version="1.0" encoding="gb2312"?><element>') . $chaine . iconv('iso-8859-1', 'gb2312', '</element>');


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 :D

Reply

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

Reply

Marsh Posté le 05-10-2005 à 10:23:37    

Bizarre [:johneh] C'est quoi l'encoding du script PHP ?

Reply

Marsh Posté le 05-10-2005 à 10:31:29    

PS: j'utilise la concaténation chaine.

Reply

Marsh Posté le 05-10-2005 à 10:32:21    

Et sinon le début de l'xml (<?xml ...) y est ?


Message édité par FlorentG le 05-10-2005 à 10:32:45
Reply

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!!!

Reply

Marsh Posté le 05-10-2005 à 10:36:51    

non car j'essaie aussi de le transformer avec iconv est donc il s'éfface

Reply

Marsh Posté le 05-10-2005 à 10:38:41    

Non, le script PHP. Ton éditeur de texte, il utilise quel encoding ?

Reply

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?

Reply

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>');

Reply

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?

Reply

Marsh Posté le 05-10-2005 à 11:38:12    

Moi j'utilise jEdit...

Reply

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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed