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 :

[DOM] Problème avec la fonction getElementById


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 79
    Par défaut [DOM] Problème avec la fonction getElementById
    Bonjour à tous,

    comme je l'ai indiqué dans le titre, j'ai un problème avec la fonction getElementById(). J'ai une fonction qui crée une une fichier XML (jusqu'à là pas de problème)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function &createXML(&$file){
    		$root = $file->createElement("rss"); 
    		$root->setAttribute("version", "2.0"); 
    		$root = $file->appendChild($root);
     
    		$element_channel = $file->createElement("channel");
    		$element_channel->setAttribute("id", "news");
    		$element_channel = $root->appendChild($element_channel);
     
                     .....
     
    		return $element_channel;
    }
    Et j'ai une autre fonction qui charge un fichier XML en mémoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	function &openXML(&$file){
    		$file->load("../data/news.xml"); 
    		$channel = $file->getElementById("news");
    		return $channel;
    	}
    et enfin j'ai une troisième fonction qui ajoute une balise item dans le fichier XML en mémoire une balise item.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function Add(&$parent, $root)
    {
            $item = $parent->createElement("item");
            $item = $root->appendChild($item);
    et quand je charge un XML deja existant en mémoire et que je lui ajoute une balise item, j'ai ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function appendChild() on a non-object in ...
    Donc je pense que cela vient de ma fonction openXML(&$file) qui me retourne un objet null.

    Si quelqu'un peut m'aider à résoudre ce problème.
    Merci d'avance.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Vous devriez tester les valeurs retournées pour éviter de faire planter le script par la suite. En tout cas je pense que ça vient du fait que PHP ne peut reconnaître un ID si cet attribut n'est pas indiqué comme tel. La documentation de PHP aborde ce point en évoquant, entre autres, la possibilité de l'indiquer par DTD ou bien de changer de méthodologie (une expression XPath par exemple).

    PS : en PHP 5, les références pour les objets sont inutiles.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 79
    Par défaut
    J'ai oublié de dire que ma balise channel a bien un id égal à news.
    Cela peut être venir aussi de ma configuration de Apache, car j'ai testé qu'en local (ubuntu Gutsy + Apache 2.0 + php5).

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Je ne prétends pas le contraire, je vous indique que l'attribut pour être considéré comme identifiant (type #ID), cela lui doit être indiqué car n'est pas déduit de son nom.

    Comme je le disais c'est clairement mentionné dans la documentation :
    Citation Envoyé par http://fr.php.net/manual/fr/function.dom-domdocument-getelementbyid.php
    Pour que cette fonction fonctionne, vous devez soit définir les attributs ID avec DOMElement->setIdAttribute() ou définir une DTD qui définit un attribut devant être de type ID. Dans le dernier cas, vous devez valider votre document avec DOMDocument->validate() ou DOMDocument::validateOnParse avant d'utiliser cette fonction.

Discussions similaires

  1. Problème avec la fonction getElementById
    Par XavierWRC dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 23/02/2006, 11h52
  2. Problème avec la fonction findfirst ()
    Par Angelico dans le forum Windows
    Réponses: 3
    Dernier message: 05/08/2004, 20h40
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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