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 19/06/2007, 20h57   #1
Invité de passage
 
Inscription : juillet 2006
Messages : 16
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 16
Points : 4
Points : 4
Par défaut [DOM] save et les noeuds fantôme

Bonjour !

Je cherche à mettre à jour un fichier XML en rajoutant des noeuds.
J'y arrive trés bien, sauf qu'après chaque noeud que je souhaite ajouter, s'ajoute un nouveau noeud qui n'a rien à faire là...

Voici l'architecture de mon fichier xml :
Code XML :
1
2
3
4
5
6
7
8
9
10
<racine>
  <nouvelle>
    <date>4 Juin 2007</date>
    <texte>un texte</texte>
  </nouvelle>
  <nouvelle>
    <date>5 Juin 2007</date>
    <texte>un autre texte</texte>
  </nouvelle>
</racine>

Voici maintenant comment je rajoute un noeud à mon fichier xml :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
$doc = new DOMDocument();
$doc->load($fichierXML);
$racine = $doc->documentElement;
 
$nouvellenouvelle = $doc->createElement("nouvelle");
$nouvelledate = $doc->createElement("date");
$nouveautexte = $doc->createElement("texte");
 
$noeudtextedate = $doc->createTextNode((string)$_POST['jour']." ".(string)$_POST['mois']." ".(string)$_POST['annee']);
$noeudtextetexte = $doc->createTextNode((string)$_POST['texte']);
 
$nouvelledate->appendChild($noeudtextedate);
$nouveautexte->appendChild($noeudtextetexte);
 
$nouvellenouvelle->appendChild($nouvelledate);
$nouvellenouvelle->appendChild($nouveautexte);
 
$racine->appendChild($nouvellenouvelle);
 
echo $doc->saveXML()."\n";
$doc->save($fichierXML);
En faisant cela, j'espère modifier mon fichier xml de manière à ce qu'il ressemble à ça :
Code XML :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<racine>
  <nouvelle>
    <date>4 Juin 2007</date>
    <texte>un texte</texte>
  </nouvelle>
  <nouvelle>
    <date>5 Juin 2007</date>
    <texte>un autre texte</texte>
  </nouvelle>
  <nouvelle>
    <date>6 Juin 2007</date>
    <texte>un autre texte rajouté par le script php</texte>
  </nouvelle>
</racine>

D'ailleur, la ligne
echo $doc->saveXML()."\n";
Me confirme que mon fichier ressemble bien à ce que je voulais.
Pourtant, quand je regarde le fichier xml enregistré par $doc->save($fichierXML);
un autre noeud "nouvelle" apparaît tout à la fin de mon xml qui du coup ressemble à ca :
Code XML :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<racine>
  <nouvelle>
    <date>4 Juin 2007</date>
    <texte>un texte</texte>
  </nouvelle>
  <nouvelle>
    <date>5 Juin 2007</date>
    <texte>un autre texte</texte>
  </nouvelle>
  <nouvelle>
    <date>6 Juin 2007</date>
    <texte>un autre texte rajouté par le script php</texte>
  </nouvelle>
  <nouvelle>
    <date> </date>
    <texte/>
  </nouvelle>
</racine>

Bref, je ne comprends pas d'où vient ce "noeud fantôme", et j'en suis bien embêté...

Pourriez-vous m'aider à comprendre ce shmilblick ?
tatatoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2007, 00h55   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 827
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 827
Points : 3 459
Points : 3 459
Je viens de faire le test avec ton code (à peine modifié, j'ai juste viré les $_POST) et je n'ai pas de souci, pas de <nouvelle> fantôme.
Peut-être un PHP / DOMXML bugué ?
Peux-tu donner un testcase simpliste et pleinement fonctionnel illustrant le "bug" ?
Perso : PHP 5.2.4-dev
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. 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 22h24.


 
 
 
 
Partenaires

Hébergement Web