Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1854 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  comment transformer un fichier xml en un tableau

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

comment transformer un fichier xml en un tableau

n°1210910
maure-10
Posté le 29-09-2005 à 16:26:15  profilanswer
 

Bonjour,
 
j'aimerais savoir s'il existe une fonction php qui permet de transformer un fichier xml en tableau

mood
Publicité
Posté le 29-09-2005 à 16:26:15  profilanswer
 

n°1211084
FlorentG
Posté le 29-09-2005 à 20:02:33  profilanswer
 

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

n°1211737
maure-10
Posté le 30-09-2005 à 14:49:16  profilanswer
 

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

n°1211749
FlorentG
Posté le 30-09-2005 à 14:58:50  profilanswer
 

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 ?

n°1211779
maure-10
Posté le 30-09-2005 à 15:15:55  profilanswer
 

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.
 

n°1211796
FlorentG
Posté le 30-09-2005 à 15:33:48  profilanswer
 

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]

n°1211807
maure-10
Posté le 30-09-2005 à 15:41:42  profilanswer
 

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

n°1211826
FlorentG
Posté le 30-09-2005 à 15:57:27  profilanswer
 

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

n°1211835
maure-10
Posté le 30-09-2005 à 16:04:57  profilanswer
 

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.

n°1211838
FlorentG
Posté le 30-09-2005 à 16:05:49  profilanswer
 

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

mood
Publicité
Posté le 30-09-2005 à 16:05:49  profilanswer
 

n°1211873
maure-10
Posté le 30-09-2005 à 16:29:59  profilanswer
 

En fait je développe en intranet ...
 
Mais si vous me donner votre email je vous envirrez le fichier en question

n°1211887
FlorentG
Posté le 30-09-2005 à 16:40:52  profilanswer
 

L'email est visible dans le profil ;)
 
Sinon, comment est généré l'XML chinois ?

n°1211971
maure-10
Posté le 30-09-2005 à 17:33:15  profilanswer
 

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.

n°1211973
maure-10
Posté le 30-09-2005 à 17:33:55  profilanswer
 

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

n°1212340
FlorentG
Posté le 01-10-2005 à 11:10:34  profilanswer
 

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

n°1213422
maure-10
Posté le 03-10-2005 à 11:22:50  profilanswer
 

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

n°1213486
maure-10
Posté le 03-10-2005 à 12:33:26  profilanswer
 

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?

n°1214105
FlorentG
Posté le 04-10-2005 à 09:25:59  profilanswer
 

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

n°1214163
maure-10
Posté le 04-10-2005 à 10:58:51  profilanswer
 

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

n°1214203
FlorentG
Posté le 04-10-2005 à 11:32:52  profilanswer
 

Pourquoi ne gardes-tu pas l'utf-8 ? C'est 10 fois plus simple que de gérer 500 encoding ?

n°1214292
maure-10
Posté le 04-10-2005 à 12:44:50  profilanswer
 

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

n°1214301
FlorentG
Posté le 04-10-2005 à 12:50:41  profilanswer
 

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

n°1214307
maure-10
Posté le 04-10-2005 à 13:06:17  profilanswer
 

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?

n°1214364
FlorentG
Posté le 04-10-2005 à 13:52:12  profilanswer
 

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

n°1214702
maure-10
Posté le 04-10-2005 à 16:28:10  profilanswer
 

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

n°1214705
FlorentG
Posté le 04-10-2005 à 16:35:12  profilanswer
 

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

n°1214830
maure-10
Posté le 04-10-2005 à 18:12:38  profilanswer
 

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

n°1214887
FlorentG
Posté le 04-10-2005 à 19:10:13  profilanswer
 

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

n°1215213
maure-10
Posté le 05-10-2005 à 10:21:43  profilanswer
 

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

n°1215214
FlorentG
Posté le 05-10-2005 à 10:23:37  profilanswer
 

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

n°1215223
maure-10
Posté le 05-10-2005 à 10:31:29  profilanswer
 

PS: j'utilise la concaténation chaine.

n°1215225
FlorentG
Posté le 05-10-2005 à 10:32:21  profilanswer
 

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


Message édité par FlorentG le 05-10-2005 à 10:32:45
n°1215229
maure-10
Posté le 05-10-2005 à 10:35:04  profilanswer
 

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

n°1215231
maure-10
Posté le 05-10-2005 à 10:36:51  profilanswer
 

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

n°1215232
FlorentG
Posté le 05-10-2005 à 10:38:41  profilanswer
 

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

n°1215233
maure-10
Posté le 05-10-2005 à 10:41:20  profilanswer
 

mon editeur de texte c'est emacs, je vais essayer de voir quel encoding utilise
 
tu penses que l'editeur de texte ca joue?

n°1215235
FlorentG
Posté le 05-10-2005 à 10:42:15  profilanswer
 

Ouais, s'il encode ton fichier en iso-machin-truc, faut changer les iconv :

iconv('iso-machin-truc', 'gb2312', '</element>');

n°1215277
maure-10
Posté le 05-10-2005 à 11:32:37  profilanswer
 

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?

n°1215288
FlorentG
Posté le 05-10-2005 à 11:38:12  profilanswer
 

Moi j'utilise jEdit...

n°1215412
maure-10
Posté le 05-10-2005 à 13:04:11  profilanswer
 

est ce que tu as testé la fonction  
 
iconv('iso-machin-truc', 'gb2312', '</element>'); ?
 
pour voir si le pb vient d'emacs.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  comment transformer un fichier xml en un tableau

 

Sujets relatifs
Syntaxe pour appeller un fichierTriturage de fichier en PERL
sql tableauremplacer une chaine de caractere dans un fichier en .bat
VB Excel - Renommer fichier en fonction du répertoirefichier matlab?
mise en forme d'un fichier xls à partir de vb dans accesouvrir un fichier protégé via Http avec une fonction PHP
Plusieurs pieds de page dans un seul fichier htmltransformer un fichier de données en tableau
Plus de sujets relatifs à : comment transformer un fichier xml en un tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR