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] je sèche sur l'origine d'une erreur


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Par défaut [SimpleXML] je sèche sur l'origine d'une erreur
    Bonjour à tous...

    Voilà, je m'adresse à vous... car la je comprends pas mon erreur...

    Conf: Php 5.2.0

    J'ai une classe de chargement de modules qui doit parser un fichier xml lors de la construction, qui me retourne une erreur simpleXml...

    le fichier xml modules.xml

    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" ?>
    <modules>
    	<module name="SystemCore" status="1" src="./class/SystemCore.php" />
    	<module name="log" status="1" src="./class/log.php" />
    	<module name="mysql" status="1" src="./class/mysql.php" />
    	<module name="test" status="1" src="./class/class.test.php" />
    </modules>

    Le constructeur en question: awaeCore.php

    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
    17
    18
    19
    20
    21
    22
    23
    24
    protected function __construct() {
     
    		$classname = strtolower(get_class($this));
     
    		// Si la classe a déja été instancié, pas la peine de refaire une recherche.
    		if ( !isset(self::$_module[$classname]) ) {
    			// On charge le fichier de conf.
    			self::$_xml = simplexml_load_file($this->FileConf);
     
    			// On regarde si le module existe dans le fichier modules.xml.
    			$var = self::$_xml->xpath('//module[@name="'.$classname.'"]');
    			// Si c'est pas le cas ==> erreur
    			if ( $var === FALSE )
    			throw new Exception('Module '.$classname.' introuvable dans le fichier de configuration');
     
    			// On recherche la chaine XML du module.
    			$mod = simplexml_load_string($var[0]->asXml());
    			// On vérifie son status.
    			if ( (int) $mod['status'] === 0 ) {
    				throw new Exception('Module '.$classname.' ne peut être chargé : Status = 0');
    			} elseif ( (int) $mod['status'] === 2 ) {
    				$this->debug = TRUE;
    			}
    		}
    Lors de l'appel... j'ai un Fatal error:
    Call to a member function asXml() on a non-object in /Applications/MAMP/www/masociete.local/awae-r1/awaeCore.php on line 29...
    la ligne 29:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mod = simplexml_load_string($var[0]->asXml());
    Si je comprends bien... il me dit que $var[0] n'est pas un objet simplexml... pourtant...

    un print_r de $var[0]:

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [name] => test
                [status] => 1
                [src] => ./class/class.test.php
            )
    )

    Voila... au secours, là je suis vraiment désespéré... cherché partout... déjà passé quelques heures sur le problème... éclairé moi de vos lanternes...

    Manu

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Par défaut
    Mwep en fait déjà il y a un petit truc qui me chiffone c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $classname = strtolower(get_class($this));
    Pourquoi tu la met tout en minuscule ? Car après tu refait un test du nom mais dans ton XML l'attribut comporte des majuscule alors que ta variable PHP sera tout en minuscule et l'XML est sensible à la case :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //Tu le recherche :
    $var = self::$_xml->xpath('//module[@name="'.$classname.'"]');
     
    //Mais dans ton XML pour cet attribut il te faut les majuscules je pense.
    <module name="SystemCore" status="1" src="./class/SystemCore.php" />
     
    //Et essaye de charger depuis $var et non $var[0]
    $mod = simplexml_load_string($var->asXml());
    Mais je vois pas pourquoi tu fait sa :o car au final $mod sera identique à ton $var :s donc reste avec $var. Car var[0]->asXML() va transformer ton objet XML en une chaîne pour du XML 1.0 (si tu veut utiliser les fonctions DOM en fait) et apres simplexml_load_string va convertir la chaine XML 1.0 en une chaîne simplexml soit ton $var au début !! Sinon un conseil utilise les fonctions DOM c'est un peu plus complexe à comprendre mais sa te permet de faire beaucoups plus de choses, le simplexml je l'utilisai au début surtout pour extraire des données facilement pour du multi language mais jsuis passé au DOM le DOM normal, car y a les fonctions DOM XML et les fonctions DOM (le mieu c'est DOM normal ^^).

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Par défaut
    En effet...

    j'ai finallement carrément viré le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mod = simplexml_load_string($var->asXml());
    et le strtolower...

    Merci pour ta lanterne

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Par défaut
    Donc sa marche la ?

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

Discussions similaires

  1. [AC-2003] Expression à l'origine d'une erreur
    Par KANIN dans le forum IHM
    Réponses: 2
    Dernier message: 09/06/2010, 10h37
  2. [AC-2007] Erreur 0 et Comment trouver l'origine d'une erreur ?
    Par tibofo dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/01/2010, 21h04
  3. Comment trapper le code SQL à l'origine d'une erreur
    Par tibal dans le forum Adaptive Server Enterprise
    Réponses: 2
    Dernier message: 17/06/2009, 15h55
  4. Réponses: 2
    Dernier message: 26/05/2008, 08h54
  5. Réponses: 24
    Dernier message: 10/04/2007, 19h40

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