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] Fichier XML distant mal formé


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Points : 26
    Points
    26
    Par défaut [SimpleXML] Fichier XML distant mal formé
    Salut à tous, je suis en train de travailler sur un site web que je rempli à l'aide de flux XML distant sur un autre site, je lui passe une adresse avec des paramètres et il me renvoi un flux XML. Mon problème est que je tombe sur un fichier XML mal formé a un moment dans le traitement, j'ai cherché toute la matinée mais pas moyen de trouver une fonction qui vérifie si le fichier xml est bien formé avant de crée un element simpleXML.
    Si quelqu'un a une idée merci.
    C'est a ce moment la que ca plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    foreach("Condition pour boucler")
    {
        $res=file_get_contents("mon adresse");
        $xml = new SimpleXMLElement(utf8_encode($res));
        //traitement
    }
    la il me retourne une erreur que le fichier est mal formé, ce que je voudrais c serais tester si ce dernier est bien formé, et si il l'est balancer le traitement sinon passer au flux suivant, un truc dans ce gout la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    foreach("Condition pour boucler")
    {
        $res=file_get_contents("mon adresse");
        if(...test sur res sur la validité du flux...)
        {
            $xml = new SimpleXMLElement(utf8_encode($res));
            //traitement
        }
    }

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    La documentation indique pour simplexml_load_file qu'elle retourne la valeur FALSE en cas d'erreur :
    Valeurs de retour

    Retourne un objet de la classe SimpleXMLElement dont les propriétés contiennent les données du document XML. Si une erreur survient, la fonction retournera FALSE.
    Par ailleurs, il n'est pas nécessaire de recourir à file_get_contents car simplexml_load_file comme le constructeur sont eux-aussi capable d'utiliser la fonctionnalité allow_url_fopen pour charger un flux distant à l'aide des protocoles standards (http, https, ftp, ...).

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    Merci pour ta réponse, j'ai donc regarder pour passer uniquement par le constructeur, mais ca bloque encore au même endroit
    voila mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    foreach("Condition pour boucler")
    {
        $xml = new SimpleXMLElement("mon URL",NULL,TRUE);
     
        if($xml || !empty($xml))
        {
            foreach($xml->ressource as $res)
            {
                //traitement
            }
        }
    }
    et je tombe encore sur mon erreur de fichier mal formé

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Justement le constructeur a un comportement différent : il lève une exception, alors que les fonctions simplexml_load_[file|string] retourne une valeur FALSE. Comme cela est détaillé dans leur documentation respective.

    Avec simplexml_load_file :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    libxml_use_internal_errors(TRUE); // N'affiche pas les erreurs
    if (FALSE === $xml = simplexml_load_file($url)) {
        die(libxml_get_last_error()->message);
    }
    Avec le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try {
        libxml_use_internal_errors(TRUE); // N'affiche pas les erreurs
        $xml = new SimpleXMLElement($url, NULL, TRUE);
    } catch (Exception $e) {
        die($e->getMessage());
    }
    (ce ne sont que des exemples !)

    Il n'y est cependant fait mention d'aucune note de version donc ce serait théoriquement valable pour toute version 5.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    Effectivement, je ne m'y prenais pas comme ca, ca fonctionne maintenant merci bien pour ton aide.

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

Discussions similaires

  1. [SimpleXML] Lecture d'un fichier xml distant
    Par Palca dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 11/02/2008, 15h26
  2. [XSLT] Appliquer un traitement xslt sur un fichier XML distant
    Par mabig dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 14/03/2006, 09h38
  3. Réponses: 2
    Dernier message: 17/12/2005, 20h07
  4. [DOM] Créer un fichier XML sous une forme bien précise
    Par LaseLiep dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 09/06/2005, 18h05

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