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 13/10/2007, 04h11   #1
Invité de passage
 
Inscription : octobre 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 3
Points : 0
Points : 0
Par défaut [DOM] Ecrire dans mon XML avec du PHP

Je suis en train de faire un module tout bête de mise a jour de site web et je n'arrive pas a le finaliser à cause d'une erreur au niveau de mon code PHP, j'aimerai un coup de main si c'est possible.

Mon xml a cette tete la:
Code XML :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<liste>
 
<news>
<nom>blabla</nom>
<mail>blablabla</mail>
<msg>mess1</msg>
</news>
 
<news>
<nom>blabla</nom>
<mail>blablabla</mail>
<msg>mess2</msg>
</news>
 
</liste>
</root>
Et je tente d'ecrire dedans avec un code comme ca:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
 
	$pseudo = $_POST["pseudo"];
	$mail = $_POST["mail"];
	$mess = $_POST["mess"];
 
	$urlxml = "./../xml/news.xml";
 
	$doc = new DOMDocument();
 
	$doc->loadXML($urlxml);
 
	$newnom = $doc->createTextNode(utf8_encode($pseudo));
	$newmail = $doc->createTextNode(utf8_encode($mail));
	$newmsg = $doc->createTextNode(utf8_encode($mess));
 
	$balnews = $doc->createElement('news');
	$balnom = $doc->createElement('nom');
	$balmail = $doc->createElement('mail');
	$balmess = $doc->createElement('msg');
 
	$balnom->appendChild($newnom);
	$balmail->appendChild($newmail);
	$balmess->appendChild($newmsg);
 
	$balnews->appendChild($balnom);
	$balnews->appendChild($balmail);
	$balnews->appendChild($balmess);
 
	$racines = $doc->getElementsByTagName('liste');
	$racine = $racines->item(0);
 
	$racine->appendChild($balnews);
 
	$doc->save($urlxml);
 
?>
Le probleme c'est que j'ai l'erreur suivante sur la ligne en gras:
Citation:
Fatal error: Call to a member function appendChild() on a non-object in /data/members/blablabla/news.php
Je commence a craquer
PurpleDoll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2007, 09h50   #2
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605


Tu utilises quelle version de PHP ?
Si tu es en version 5 tu peux utiliser l'extension SimpleXML qui est plus simple à gérer.

Pour ce qui est de ton erreur tu devrais faire un et tu verras que tu auras un objet vide (c'est une supposition mais une supposition quasi certaine ).
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2007, 10h30   #3
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
La méthode loadXML c'est pour créer un DomDocument à partir d'une chaîne. La méthode load, qui conviendrait à votre cas, fait la même chose à partir du nom d'un fichier.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2007, 12h34   #4
Invité de passage
 
Inscription : octobre 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 3
Points : 0
Points : 0
Ca marche! Merci beaucoup
PurpleDoll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2007, 01h47   #5
Invité de passage
 
Inscription : octobre 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 3
Points : 0
Points : 0
Je vais pas faire un deuxieme post pour ca mais j'ai une petite question supplementaire, le module marche, c'est cool, mais quand je fais un retour a la ligne dans la zone de texte de ma page html (variable mess) il me la vire dans le xml. Du coup j'ai tenté un truc et j'ai comme code.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
 
	$pseudo = $_POST["pseudo"];
	$mail = $_POST["mail"];
	$mess = $_POST["mess"];
 
	$entrephp = array("\n");
	$entrehtml = array("<br/>");
 
	$mess = str_replace($entrephp, $entrehtml, $mess);
 
	$urlxml = "./../xml/news.xml";
 
	$doc = new DOMDocument();
 
	$doc->load($urlxml);
 
	$newnom = $doc->createTextNode(utf8_encode($pseudo));
	$newmail = $doc->createTextNode(utf8_encode($mail));
	$newmsg = $doc->createTextNode(utf8_encode($mess));
 
	$balnews = $doc->createElement('news');
	$balnom = $doc->createElement('nom');
	$balmail = $doc->createElement('mail');
	$balmess = $doc->createElement('msg');
 
	$balnom->appendChild($newnom);
	$balmail->appendChild($newmail);
	$balmess->appendChild($newmsg);
 
	$balnews->appendChild($balnom);
	$balnews->appendChild($balmail);
	$balnews->appendChild($balmess);
 
	$racines = $doc->getElementsByTagName('liste');
	$racine = $racines->item(0);
 
	$racine->appendChild($balnews);
 
	$doc->save($urlxml);
 
?>
Et je me retrouve avec des "<br/>" sur ma page qui affiche les news au lieu d'avoir des vrais retour chariot, je suppose que ca vient du fait que je stock le contenu de ma balise <msg></msg> dans un textnode sur cette page et du coup le navigateur n'est plu capable de l'interpreter mais j'aimerai savoir s'il y a une solution.
PurpleDoll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2007, 14h06   #6
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 vous recommande de n'ajouter les balises <br /> que lorsque vous voudrez réaliser un affichage HTML de vos données, restant ainsi en toute circonstance exploitable telles quelles. Cela ne semble alors poser aucun problème par la suite puisque l'on peut utiliser la fonction nl2br :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
define('FICHIER_XML', 'testnl.xml');
 
$texte = <<< EOT
Un texte avec des
SAUTS DE LIGNE
.
EOT;
 
if (!file_exists(FICHIER_XML)) {
    $dom = new DomDocument;
    $racine = $dom->createElement('racine');
    $message = $dom->createElement('message', $texte);
    echo nl2br($message->nodeValue);
    $dom->appendChild($racine);
    $racine->appendChild($message);
    $dom->save(FICHIER_XML);
} else {
    $dom = DomDocument::load(FICHIER_XML);
    echo nl2br($dom->documentElement->firstChild->nodeValue);
}
Par rapport à votre code c'est vous qui remplacez (via str_replace) les sauts de ligne par <br /> (et de façon non portable qui plus est ).

PS : pour obtenir la racine du document, vous pouvez simplifier en :
Code :
$racine = $doc->documentElement;
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 15h29.


 
 
 
 
Partenaires

Hébergement Web