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] Parser du XML : [function.simplexml-load-file]: I/O warning


Sujet :

Bibliothèques et frameworks PHP

  1. #21
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    J'ai essayé ça aussi pour les accents mais pas mieux ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump((string) utf8_decode($xml->{utf8_encode('Réponse_tiers')}));

  2. #22
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    dans ta chaine encodage quelle sont les valeur de :
    - l'encodage fichier de ton php ?
    - l'encodage de l'entête serveur de ton php ?
    - le charset HTML de ton php ?

    au niveau de ton XML c'est :
    - l'encodage de l'entête serveur : utf-8
    - le charset HTML : iso-8859-1

  3. #23
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Alors,

    - L'encodage fichier de mon php : UTF-8 (default_charset dans php.ini)

    - L'encodage de l'entête serveur de mon php = iso-8859-1 (Valeur récupérée en affichant la source d'une page de mon serveur)

    - Le charset HTML de mon php :

    Je ne vois pas comment récupérer le charset HTML de mon PHP.
    J'espère ne pas trop répondre à coté de la plaque .... Je m'embrouille.

    Désolé et merci pour ta patience

  4. #24
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par Couiin Voir le message
    Alors,

    - L'encodage fichier de mon php : UTF-8 (default_charset dans php.ini)

    - L'encodage de l'entête serveur de mon php = iso-8859-1 (Valeur récupérée en affichant la source d'une page de mon serveur)

    - Le charset HTML de mon php :

    Je ne vois pas comment récupérer le charset HTML de mon PHP.
    J'espère ne pas trop répondre à coté de la plaque .... Je m'embrouille.

    Désolé et merci pour ta patience
    avec notepad++ par exemple dans encodage

  5. #25
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Dans NotePad++ je suis dans Format sur encoder en ANSI.

  6. #26
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par Couiin Voir le message
    Dans NotePad++ je suis dans Format sur encoder en ANSI.
    enfaite c'est plutot l'inserve ca c'est : 'L'encodage fichier de mon php'

    le Le charset HTML de mon php c'est ta balise <meta>

    en gros

    - L'encodage fichier de mon php : notepad++
    - L'encodage de l'entête serveur de mon php : firefox, cliquer droit -> information sur la page -> encodage
    - Le charset HTML de mon php : la balise <meta> content type

  7. #27
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 266
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 266
    Points : 8 564
    Points
    8 564
    Billets dans le blog
    17
    Par défaut
    Je voudrais modifier le contenu de la balise <Réponse_tiers> mais je n'arrive pas à afficher son contenu.
    J'ai compris que tu travaillais en ISO-8859-1.
    Pour moi ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    header('Content-Type: text/plain; charset=ISO-8859-1') ;
    $xml = simplexml_load_file('decisions.xml') ;
    print_r($xml->{utf8_encode('Décisions_iris')}->{utf8_encode('Réponse_tiers')}) ;
    Donne cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SimpleXMLElement Object
    (
        [0] => Le numéro de l'établissement prescripteur transmis est : 11111111111. Veuillez réexaminer la prescription médicale et retransmettre cette facture en corrigeant l'information.
    )
    A savoir que :
    - Mon script PHP est écrit en ISO-8859-1
    - SimpleXML travaille en UTF-8 : le XML en entrée est converti en UTF-8, le résultat est en UTF-8, d'où les é au lieu de é
    - Si tu veux traiter/afficher la balise <Réponse_tiers> il faudra la convertir en ISO-8859-1 avec utf8_decode( )

  8. #28
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Réponse à stealth35 :

    Je reprends :

    - L'encodage fichier de mon php : ANSI
    - L'encodage de l'entête serveur de mon php : iso-8859-1
    - Le charset HTML de mon php : iso-8859-1


    Réponse pour Séb :

    Ton code pour moi donne ça :

    Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "<?xml version="1.0" encoding="ISO-8859-1" .....

    Sur le print_r : Trying to get property of non-object
    Merci pour votre aide

  9. #29
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 266
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 266
    Points : 8 564
    Points
    8 564
    Billets dans le blog
    17
    Par défaut
    Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "<?xml version="1.0" encoding="ISO-8859-1" .....
    On est bien d'accord que tu obtiens ce msg avec exactement le même XML que celui attaché plus haut et mon script ?
    Si oui va falloir identifié ce qui provoque cette erreur sur ta config.
    Dans le fichier XML pour test :
    - Supprime le <?xml-stylesheet ?>
    - Supprime les entités telles &apos;

  10. #30
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Autant pour moi.
    Si je créer une nouvelle page PHP, que je mets ton code, j'ai le même retour que toi.
    Ce qui change c'est que je mets en plus "file_get_contents" comme c'est un chemin réseau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xml = simplexml_load_file(file_get_contents($Way)) ;
    Par contre je ne vois pas trop comment la convertir avec utf8_decode( ) alors qu'avant on fait un utf8_encode() ....

    Et l'autre souci se situe donc en amont dans mon code .....

    Merci

  11. #31
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 266
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 266
    Points : 8 564
    Points
    8 564
    Billets dans le blog
    17
    Par défaut
    Si je créer une nouvelle page PHP, que je mets ton code, j'ai le même retour que toi.
    Bon.

    $xml = simplexml_load_file(file_get_contents($Way)) ;
    Pas besoin de file_get_contents( ) ici, simplexml_load_file( ) se chargeant de récupérer le contenu du fichier.

    Par contre je ne vois pas trop comment la convertir avec utf8_decode( ) alors qu'avant on fait un utf8_encode() ....
    Le utf8_encode( ) sert juste à accéder correctement, dans ton script PHP ISO-8859-1, aux éléments possédant un caractère spécial.
    Le utf8_decode( ) sert à l'affichage du XML converti en UTF-8 par SimpleXML, ex. pour un affichage au bon format :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    header('Content-Type: text/plain; charset=ISO-8859-1') ;
    $xml = simplexml_load_file('decisions.xml') ;
    echo utf8_decode($xml->{utf8_encode('Décisions_iris')}->{utf8_encode('Réponse_tiers')}) ;
    Et l'autre souci se situe donc en amont dans mon code .....
    Oui.

  12. #32
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Salut,

    Bon, je pense avoir une idée de mon problème en amont du code. Quand le fichier xml est créé, il peut avoir cette structure :

    <Décisions_iris>
    ....
    <Réponse_tiers>
    ....
    </Décisions_iris>
    <Décisions_iris">
    ....
    <Réponse_tiers>
    ....
    </Décisions_iris>
    J'avais commencé mon code en parcourant le fichier avec un while eof et un fopen pour l'ouvrir.
    Il faut que je puisse lire toutes les balises <Réponse_tiers>

    Maintenant je travaille qu'avec SimpleXML car c'est plus propre et aussi suite à vos conseils.
    J'essaye de faire un SimpleXMLElement() mais ça plante encore .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    header('Content-Type: text/plain; charset=ISO-8859-1') ;
     
    $xml = simplexml_load_file('decisions.xml') ;
    $Var = utf8_decode($xml->{utf8_encode('Décisions_iris')}->{utf8_encode('Réponse_tiers')}) ;
     
    $elt = new SimpleXMLElement($Var);
     
    foreach ($elt->children() as $Rep) 
    {
       echo $Rep[utf8_encode('Décisions_iris')];
    }
    Le SimpleXMLElement () children pourait être une solution non ?

  13. #33
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 266
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 266
    Points : 8 564
    Points
    8 564
    Billets dans le blog
    17
    Par défaut
    Donne un exemple minimaliste de script PHP + XML qui plantent qu'on puisse tester.

  14. #34
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    tu vois bien que dans ta chaine d'encodage déjà y'a un soucis, certain sont en utf-8 et d'autre en iso-8859-1, ca aide pas deja

  15. #35
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Le script que j'utilise est celui poster plus haut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    header('Content-Type: text/plain; charset=ISO-8859-1') ;
     
    $xml = simplexml_load_file('decisions.xml') ;
    $Var = utf8_decode($xml->{utf8_encode('Décisions_iris')}->{utf8_encode('Réponse_tiers')}) ;
     
    $elt = new SimpleXMLElement($Var);
     
    foreach ($elt->children() as $Rep) 
    {
       echo $Rep[utf8_encode('Décisions_iris')];
    }
    Pour le fichier je le mets en pièce jointe.

    En fait, suivant le contenu de la balise 'Réponse_tiers', je fais ou non une modif de la chaine de caractère.

    Lecture de la balise
    --> traitement
    Si balise suivante, Lecture puis traitement jusqu'à EOF.

    Je ne sais pas si je suis clair.

    Merci beaucoup en tout cas !!
    Fichiers attachés Fichiers attachés

  16. #36
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    les & ne sont pas echapés, en les corrigeant je peu juste faire ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $xml = simplexml_load_file('decisions_2.xml');
    foreach($xml->Décisions_iris as $iris)
    {
        print_r($iris);
    }
    ca sert a rien de charger 2 fois ton xml, et pourquoi faire un utf8_decode alors que t'es en iso ?

    moi je suis tout en utf-8 et ca marche

  17. #37
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 266
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 266
    Points : 8 564
    Points
    8 564
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    les & ne sont pas echapés
    Oui, il y a 2 & incorrects qui se balladent tout seuls, ex. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Num_facture>111111111111&</Num_facture>

  18. #38
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Bonjour,
    Oui, il y a des & dans la valeur des balises mais c'est une erreur de manip de ma part. Même quand il n'y sont pas, ça ne fonctionne pas.

  19. #39
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 266
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 266
    Points : 8 564
    Points
    8 564
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Couiin Voir le message
    Oui, il y a des & dans la valeur des balises mais c'est une erreur de manip de ma part. Même quand il n'y sont pas, ça ne fonctionne pas.
    Dans ce cas donne le XML corrigé et les erreurs que tu obtiens.

  20. #40
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Je pense que je dois faire une erreur de synthaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $xml = simplexml_load_file('decisions_2.xml') ;
    foreach  (utf8_decode($xml->{utf8_encode('Décisions_iris')}->{utf8_encode('Réponse_tiers')}) as $iris)
    {
        echo($iris);
     
    }
    ça me renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Invalid argument supplied for foreach()
    Voilà

    Quand mes balises me sont renvoyées, elles le sont sous forme d'objet donc je n'ai pas la possibilité de les modifier une par une lors de la lecture. On peut les mettre dans un tableau ?

    Merci pour voter aide.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/04/2012, 16h07
  2. [SimpleXML] Parser un XML avec SimpleXML_Load_File
    Par mathieu3392 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 12/10/2007, 12h11
  3. [SimpleXML] Parser du XML dans mon php
    Par onet dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 14/02/2007, 11h09
  4. [SimpleXML] Bug SimpleXML load file
    Par eltados dans le forum Bibliothèques et frameworks
    Réponses: 13
    Dernier message: 26/07/2006, 14h06
  5. [SimpleXML] Parser un XML et en récupérer des valeurs
    Par mickael.be dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 15/04/2006, 16h08

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