IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] Utilisation de simplexml_load_file()


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 50
    Points : 55
    Points
    55
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

    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

  2. #2
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    Essaye ça pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $entete = '<'.'?xml version="1.0" encoding="utf-8"?'.">\n";

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 50
    Points : 55
    Points
    55
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

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

  4. #4
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    Ben... essaye ça alors on sait jamais :
    $contenu = utf8_encode(file_get_contents($FileTemp));

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 50
    Points : 55
    Points
    55
    Par défaut
    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...

  6. #6
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    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

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 50
    Points : 55
    Points
    55
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  8. #8
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut

    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)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SimpleXML] Erreur : fonction simplexml_load_file indéfinie
    Par defacta dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 01/10/2007, 13h08
  2. [SimpleXML] pb avec simplexml_load_file dans sous dossier
    Par astrolane dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 31/08/2007, 14h51
  3. [SimpleXML] Utilisation de la fonction simplexml_load_file()
    Par defacta dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 02/11/2006, 11h20
  4. [SimpleXML] Utilisation de SimpleXML ?
    Par ghohm dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 06/07/2006, 19h24
  5. [SimpleXML] Utilisation chez OVH
    Par vodnok dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 25/11/2005, 09h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo