Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2008, 18h29   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 57
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : mars 2007
Messages : 57
Points : 12
Points : 12
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 :
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 :
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 :
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 :
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.
CocoLeNain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 19h09   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 19h22   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 57
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : mars 2007
Messages : 57
Points : 12
Points : 12
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).
CocoLeNain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 19h29   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h16.


 
 
 
 
Partenaires

Hébergement Web