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 29/03/2008, 19h05   #1
Invité de passage
 
Inscription : mars 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 8
Points : 0
Points : 0
Par défaut [DOM] Affichage d'une balise XML

Bonjour à tous,
je suis en train de concevoir un script qui permet d'écrire un document sur un fichier xml avec dom (j'ai trop de problèmes avec simplexml).
Pour l'instant, je suis arrivé à écrire toutes les données sur un fichier xml mais pour afficher, j'ai un problème.
Dans le fichier xml, <document> est la balise racine.
Dans <document>, il y a deux balises <title> (c'est pour une fonctionnalité prochaine) et quand j'affiche une des deux, j'obtiens un message d'erreur:

Fatal error: Call to a member function item() on a non-object in C:\xampp\htdocs\esao\dina.php on line 41

Le print_r ne m'affiche que DOMDocument Object ( ) (il n'y a rien à l'intérieur de l'objet).

Voici mon code php:
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
$dom = new DOMdocument('1.0', 'iso-8859-1');
$racine = $dom->createElement('document');
$racine = $dom->appendChild($racine);
 
$title = $dom->createElement('title');
$title = $racine->appendChild($title);
 
$title1 = $dom->createTextNode($_POST['title']);
$title1 = $title->appendChild($title1);
 
$titl = $dom->createElement('title');
$titl = $racine->appendChild($titl);
 
$titl1 = $dom->createTextNode($_POST['title']);
$titl1 = $titl->appendChild($titl1);
 
$text = $dom->createElement('text');
$text = $racine->appendChild($text);
 
$text1 = $dom->createTextNode($_POST['text']);
$text1 = $text->appendChild($text1);
 
$time = $dom->createElement('created');
$time = $racine->appendChild($time);
 
$time1 = $dom->createTextNode(date("d-n-Y/H:i:s"));
$time1 = $time->appendChild($time1);
 
$dom->formatOutput = true;
 
$dom->save('doc2.xml');
 
echo $dom->title->item(0);
echo $dom->title->item(0);
print_r($dom);
?>
Le fichier xml est celui-ci:
Code :
1
2
3
4
5
6
7
<?xml version="1.0" encoding="iso-8859-1"?>
<document>
  <title></title>
  <title></title>
  <text></text>
  <created>29-3-2008/18:59:00</created>
</document>
Si quelqu'un pourrez m'aider, ça serait sympa .
Merci d'avance
worolf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2008, 21h26   #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
Code :
1
2
echo $dom->title->item(0);
echo $dom->title->item(0);
Où avez-vous vu qu'un objet DomDocument possédait une propriété title ? Et l'extension DOM ne s'utilise pas comme SimpleXML. (un environnement de développement bien configuré devrait par ailleurs générer une erreur de type warning)

Il faut d'abord passer par la méthode getElementsByTagName, par exemple, pour atteindre vos éléments title.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2008, 08h29   #3
Invité de passage
 
Inscription : mars 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 8
Points : 0
Points : 0
Donc pour faire un echo d'une balise, je dois d'abord faire un getElementsByTagName puis:
Code :
1
2
echo $dom->title->item(0);
echo $dom->title->item(1);
.
Si c'est pas cela,pouvez-vous me montrer un bout de code pour le faire.
worolf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2008, 11h55   #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
S'ils sont créés dans le même script :
Code :
1
2
3
4
5
6
7
8
9
10
11
$title = $dom->createElement('title');
$title = $racine->appendChild($title);
 
$title1 = $dom->createTextNode($_POST['title']);
$title1 = $title->appendChild($title1);
 
$titl = $dom->createElement('title');
$titl = $racine->appendChild($titl);
 
$titl1 = $dom->createTextNode($_POST['title']);
$titl1 = $titl->appendChild($titl1);
Il n'y a pas lieu de chercher bien loin :
Code :
1
2
echo $title->nodeValue;
echo $titl->nodeValue;
Sinon, une méthode parmi d'autres :
Code :
1
2
3
4
$titles = $dom->getElementsByTagName('title');
foreach ($titles as $t) {
    echo $t->nodeValue . '<br />';
}
(non testé)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 16h20   #5
Invité de passage
 
Inscription : mars 2007
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 8
Points : 0
Points : 0
Merci mais si je loade mon fichier xml plus tard (donc éventuellemnt pas avec ce fichier php), comment j'affiche les données:
Code :
1
2
echo $title->nodeValue;
echo $titl->nodeValue;
Car là, tu m'as donné un code qui me permet d'afficher les données après avoir créé le fichier mais dans le cas que j'évoque avant, je fais comment ?
worolf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 16h59   #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
J'ai aussi donné cette solution (bien que je ne l'ai pas testé). Si en revanche vous voulez accéder à votre titre de manière "indexée", c'est possible puisque $titles (cf code plus haut) est un objet DomNodeList (via la méthode item).
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 23h15.


 
 
 
 
Partenaires

Hébergement Web