Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche DOM).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/07/2007, 11h59   #1
Membre du Club
 
Étudiant
Inscription : septembre 2006
Messages : 50
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2006
Messages : 50
Points : 48
Points : 48
Par défaut [SimpleXML] Utilisation de simplexml_load_file()

Bonjour,

Je suis en train de développer un code qui permet d'extraire des données de fichiers XML générés par des logiciels de gestion de bibliographie (JabRef, Endnote etc...).

Le problème c'est que pour "parser" les données du fichier xml par la méthode simplexml_load_file(), il me faut avoir en première ligne du fichier XML :

Code :
1
2
 
<?xml version="1.0" encoding="utf-8" ?>
Certains gestionnaires de biblio (tel que EndNote) ne permettent pas d'insérer cette première ligne dans les fichiers XML.

Donc je le fais via une petite routine avant de traiter le fichier par la fonction simplexml :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
<?
//Apres avoir récupérer par le biais d'un formulaire le fichier XML
 
$FileTemp = $_FILES['FileXML']['tmp_name'];
$entete = "<?xml version=\"1.0\" encoding=\"utf-8\"?".">\n";
$contenu = file_get_contents($FileTemp);
$contenu = $entete.$contenu;
$fichier = fopen($FileTemp,"w+");
fwrite($fichier,$contenu);
fclose($fichier);
@copy($FileTemp,"base.xml");
 
$File = simplexml_load_file("base.xml");
 
foreach($File->.....
J'obtiens après exécution le message d'erreur suivant :

Citation:
Warning: simplexml_load_file(): base.xml:1: parser error : Start tag expected, '<' not found in C:\Program Files\wamp\www\database\PostXML.php on line 37

Warning: simplexml_load_file(): <?xml version="1.0" encoding="utf-8"?>ï..........
Par contre si je construis moi même le fichier base.xml en rajoutant la première ligne (<?xml version="1.0" encoding="utf-8"?>)... je n'ai aucun problème : tout se fait normalement !!
Pourtant mes deux fichiers sont identiques : l'insertion de la première ligne via le programme marche très bien...

La seule différence, c'est que dans un cas je le fais manuellement et que dans l'autre je le fais faire par le programme...

Quelqu'un aurait il une idée ? C'est un problème de conversion, de réécriture du fichier par fwrite() ?

Bref là je sèche...

Merci,
Bonne journée,
Bruno
Forza Correza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 14h01   #2
Membre chevronné
 
Avatar de haltabush
 
Développeur Web
Inscription : avril 2005
Messages : 726
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 726
Points : 790
Points : 790
Essaye ça pour voir :
Code :
1
2
 
$entete = '<'.'?xml version="1.0" encoding="utf-8"?'.">\n";
__________________
HADOPI : black-out du net!
haltabush est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 14h13   #3
Membre du Club
 
Étudiant
Inscription : septembre 2006
Messages : 50
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2006
Messages : 50
Points : 48
Points : 48
J'ai essayé... mais le probleme n'est dans la construction du fichier xml, car j'ai bien apres reecriture du fichier (insertion par le programme de la ligne <?xml version="1.0" encoding="utf-8" ?>) un fichier conforme a ce que je souhaite avoir a savoir :

Code XML :
1
2
3
4
5
6
7
 
<?xml version="1.0" encoding="utf-8" ?>
<XML>
<RECORDS>
.....
</RECORDS>
</XML>

mais en fait je pense que c'est un probleme d'encodage parce qu'il me met ce message d'erreur :

Citation:
Warning: simplexml_load_file() [function.simplexml-load-file]: <?xml version="1.0" encoding="utf-8"?>"sigle"<XML> in C:\Program Files\wamp\www\database\PostXML.php on line 37
"sigle" est une chaine de caracteres bizaroide un i tremat suivit de 2 signes > suivit du point d'interogation retourné...
Mystere......
Forza Correza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 14h20   #4
Membre chevronné
 
Avatar de haltabush
 
Développeur Web
Inscription : avril 2005
Messages : 726
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 726
Points : 790
Points : 790
Ben... essaye ça alors on sait jamais :
$contenu = utf8_encode(file_get_contents($FileTemp));
__________________
HADOPI : black-out du net!
haltabush est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 14h25   #5
Membre du Club
 
Étudiant
Inscription : septembre 2006
Messages : 50
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2006
Messages : 50
Points : 48
Points : 48
Citation:
Envoyé par haltabush
Ben... essaye ça alors on sait jamais :
$contenu = utf8_encode(file_get_contents($FileTemp));

Je pense qu'en effet c'est un probleme de ce genre : j'ai fait ce que tu m'as conseillé, et le message d'erreur a changé : en fait le "sigle" present dans le message d'erreur à changer d'expression...

Je vais continuer sur cette voie... merci...
Forza Correza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 15h00   #6
Membre chevronné
 
Avatar de haltabush
 
Développeur Web
Inscription : avril 2005
Messages : 726
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 726
Points : 790
Points : 790
Pour en être sûr, récupère le fichier original, copie le dans notepad et enregistre le en utf8... Si ca marche toujorus pas avec ce fichier, c'est que ya un autre problème
__________________
HADOPI : black-out du net!
haltabush est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 15h16   #7
Membre du Club
 
Étudiant
Inscription : septembre 2006
Messages : 50
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2006
Messages : 50
Points : 48
Points : 48
Bon j'ai fait un paquet de tests, et finalement je n'ai pas trouvé exactement d'où vient le probleme :

en fait ce doit venir du retour chariot "\n" : meme si j'en suis pas convaincu...
Je l'ai enlevé et çà marche desormais !


Code :
1
2
3
4
5
6
7
 
<? 
\\Ancien code : 
$entete = "<?xml version=\"1.0\" encoding=\"utf-8\"?".">\n";
 
\\Nouveau code : 
$entete = "<?xml version=\"1.0\" encoding=\"utf-8\"?".">";
J'avais pourtant déjà essayé cette facon de faire, mais ca n'avait pas fonctionné... Quoiqu'il en soit il est certain qu'il y avait une broutille a ce niveau avant ou apres le retour à la ligne...

Bref çà fonctionne bien desormais... je reste un peu sur ma fin, mais je n'ai pas le temps, ni les competences, pour savoir exactement où etait le probleme : en tout cas il n'etait pas visible car le texte entre une version du fichier xml qui fonctionnait et une version qui buggait etait strictement identique en tout point (probablement un bug lors de la reecriture du fichier : un code syntaxique qui ne plaisait pas a simplexml... bizar qu'en meme)...

En tout cas merci Haltabush de t'être pencher sur mon cas....
@+,
Bonne fin de journée...

Bruno
Forza Correza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 15h45   #8
Membre chevronné
 
Avatar de haltabush
 
Développeur Web
Inscription : avril 2005
Messages : 726
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 726
Points : 790
Points : 790

C'est normal (enfin je crois) : il me semble que tu dois mettre quelque part "allowWhiteSpace", comme en Flash... Enfin je sais plus exactement, mais en gros les espaces (et autres retours chariot) et les fichiers XML ca fait pas bon ménage. J'ai eu sensiblement le même problème pour lire, via Dom et Javascript, un fichier HTML : les sauts de lignes était considérés comme des noeuds textes (ce qui est logique, malgré les apparence... mais sacrément casse pied vu que seul Firefox se conforme à ce standard)
__________________
HADOPI : black-out du net!
haltabush est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h24.


 
 
 
 
Partenaires

Hébergement Web