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 07/06/2007, 18h24   #1
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 171
Points : 32
Points : 32
Par défaut [DOM] Erreur sur createElement()

Bonsoir,
En utilisant la fonction create_element de domxml, j'obtiens une erreur :
Citation:
Fatal error: Call to undefined method DOMElement::create_element() in *** on line 131
)
Je ne comprends pas pourquoi cette erreur .. (la fct est bien la bonne ?)

Mon code :
Code :
1
2
3
4
$rac = $dom->getElementsByTagName("ips")->item(0);
$node = $rac->create_element("ip");
$newnode = $rac->append_child($node);
$newnode->set_attribute("date", time());
mon xml est du genre :
Code XML :
1
2
3
4
5
6
<ips>
<ip date="124564668">12.124.215</ip>
<ip date="124564668">12.124.215</ip>
<ip date="124564668">12.124.215</ip>
<ip date="124564668">12.124.215</ip>
</ips>

Merci pour votre aide ..
Klimium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 18h45   #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 utilisez l'extension DOM ou DOM XML ? Parce getElementsByTagName n'existe que pour l'extension DOM (le nom correct est get_elements_by_tagname pour DOM XML).

Voilà ce que j'ai écrit pour DOM XML :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$dom = domxml_open_file('ips.xml', DOMXML_LOAD_DONT_KEEP_BLANKS);
$racine = $dom->document_element();
$newip = $dom->create_element('ip');
$newip->set_attribute('date', time());
$newip = $racine->append_child($newip);
 
$newtexte = $dom->create_text_node('12.124.215');
$newtexte = $newip->append_child($newtexte);
 
// Pour vérification :
header('Content-type: text/plain');
echo $dom->dump_mem(TRUE);
?>
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 19h18   #3
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 171
Points : 32
Points : 32
Merci.

Cette fois-ci j'ai cette réponse :
Citation:
Fatal error: Call to undefined function domxml_open_file() in *** on line 111
)
Je ne vois pas pourquoi cette erreur ..
Klimium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 19h36   #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
Quelle version de PHP ? Il s'agit bien de l'extension DOM XML ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 21h16   #5
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 171
Points : 32
Points : 32
Normalement oui, j'ai activé sur Wamp et j'ai le même résultat ..
Klimium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 21h26   #6
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 171
Points : 32
Points : 32
Enfaite je pense savoir pourquoi, j'utilise ça dans une classe, comment faire ?
C'est avec le extend ou un truc du genre, mais comme l'utiliser ?
Klimium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 21h52   #7
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
Citation:
Envoyé par Klimium
Normalement oui, j'ai activé sur Wamp et j'ai le même résultat ..
C'est facile à vérifier, notamment en regardant la sortie de phpinfo. Si vous utilisez, l'extension DOM en revanche, cela se traduit ainsi :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$dom = new DomDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->formatOutput = TRUE;
$dom->load('ips.xml');
$racine = $dom->documentElement;
$newip = $dom->createElement("ip");
$newip->setAttribute('date', time());
$newip = $racine->appendChild($newip);
 
$newtexte = $dom->createTextNode('12.124.215');
$newtexte = $newip->appendChild($newtexte);
 
// Pour vérification :
header('Content-type: text/plain');
echo $dom->saveXML();
?>
Citation:
Envoyé par Klimium
Enfaite je pense savoir pourquoi, j'utilise ça dans une classe, comment faire ?
C'est avec le extend ou un truc du genre, mais comme l'utiliser ?
Il faudrait être plus précis, en donnant du code par exemple
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 21h55   #8
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 171
Points : 32
Points : 32
Ca change quoi en faite que je fasse par DOM ou DomXML ?
Tu me conseilles lequel ?

Et bien enfaite je traite les données du fichier xml dans une classe, c'est pour ça que ça ne fonctionne pas .. (ds une simple fct ça marche).
Klimium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 22h11   #9
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
Citation:
Envoyé par Klimium
Ca change quoi en faite que je fasse par DOM ou DomXML ?
Tu me conseilles lequel ?
Vous n'avez pas le choix justement ! PHP 4, c'est l'extension DOM XML. PHP 5, c'est l'extension DOM tout court. Elles définissent à peu près les mêmes fonctionnalités mais comme vous pouvez le remarquer elles ne portent pas les mêmes noms et l'extension DOM donc PHP 5 est plus orientée objet ! (c'est vrai qu'on peut utiliser l'extension DOM XML sous PHP 5 mais il faut passer par l'extension PECL).

Citation:
Envoyé par Klimium
Et bien enfaite je traite les données du fichier xml dans une classe, c'est pour ça que ça ne fonctionne pas .. (ds une simple fct ça marche).
Il manque des $this ? Sans code, je ne suis pas en mesure de vous aider plus ...
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2007, 22h16   #10
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 171
Points : 32
Points : 32
Oki, je vais utiliser DOM alors

Sinon j'ai un problème avec
Code :
1
2
$newtexte = $dom->createTextNode($ip_posteur);
			$newtexte = $newip->appendChild($newtexte);
Il me fait est balise du type <ip date="122461" />

Alors que je voudrais : <ip date="125561485">123.4543.45</ip>
Klimium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 18h32   #11
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 171
Points : 32
Points : 32
Voilà mon code en entier :
Code :
1
2
3
4
5
6
7
8
9
10
11
$dom = new DomDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->formatOutput = TRUE;
$dom->load($fichier_ips);
$racine = $dom->documentElement;
$newip = $dom->createElement("ip");
$newip->setAttribute('date', time());
$newip = $racine->appendChild($newip);
 
$newtexte = $dom->createTextNode($ip_posteur);
$newtexte = $newip->appendChild($newtexte);
D'où vient le problème ?
Klimium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 19h14   #12
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
Bonne question, avec votre code j'obtiens :
Code XML :
1
2
3
4
5
6
7
8
<?xml version="1.0"?>
<ips>
  <ip date="124564668">12.124.215</ip>
  <ip date="124564668">12.124.215</ip>
  <ip date="124564668">12.124.215</ip>
  <ip date="124564668">12.124.215</ip>
  <ip date="1181322637">0</ip>
</ips>
Celui à 0 étant le nouveau.

Pour que le tag soit vide (<ip date="..."/>), c'est que l'ajout du noeud texte n'est pas effective (appendChild). Mais vous en faites quoi après au juste du nouveau code XML obtenu ? Vous l'enregistrez (méthode save) ou l'affichez (méthode saveXML) au moins ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 20h53   #13
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 171
Points : 32
Points : 32
J'utilise save :
Code :
if (!$dom->save($fichier_ips)) $bool = false;
Klimium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2007, 08h32   #14
Nouveau Membre du Club
 
Inscription : octobre 2006
Messages : 171
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 171
Points : 32
Points : 32
Même avec un simple
Code :
1
2
3
$newip = $dom->createElement('ip', $ip_posteur);
$newip->setAttribute('date', time());
$racine->appendChild($newip);
Mais rien à faire ..

J'ai essayé ça :

Code :
1
2
3
$newip = $dom->createElement('ip', $ip_posteur);
$newip->setAttribute('date', time());
$dom->appendChild($newip);
et là ça me mettait bien le <ip date="21212">1548.14</ip> mais ça le mettait à la racine ..

??
Klimium 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 11h28.


 
 
 
 
Partenaires

Hébergement Web