Aide pour supprimer un noeud XML, PHP 5, DOM [RESOLU]

Sylvano06
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 12
Inscription: 13 Fév 2006

Aide pour supprimer un noeud XML, PHP 5, DOM [RESOLU]

Message le Mer Mai 02, 2007 19:49

Bonjour a tous,

Je travail actuellement sur un document XML avec PHP5 et les fonctions DOM.

Je voudrais supprimer un noeud dans mon document xml identifié par un id, et supprimer également ses enfants.

Voici mon document xml :

Code: Tout sélectionner
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<frenchQuality>
  <photo id="0">
    <image>img/img1.jpg</image>
    <url>http://www.google.fr</url>
  </photo>
  <photo id="1">
    <image>img/img2.jpg</image>
    <url>http://www.web-together.com</url>
  </photo>
  <photo id="2">
    <image>img/img3.jpg</image>
    <url>http://www.clubic.com</url>
  </photo>
  <photo id="3">
    <image>img/img4.jpg</image>
    <url>http://www.ideal-com.com</url>
  </photo>
  <photo id="4">
    <image>img/appli.JPG</image>
    <url>test</url>
  </photo>
  <photo id="5">
    <image>img/Coucher_de_soleil.jpg</image>
    <url>couher</url>
  </photo>
</frenchQuality>


Par exemple donc je souhaite supprimer le noeud photo 5 et donc son contenu.

Voici mon code PHP que j'utilise :

Code: Tout sélectionner
<?php
//on recupere l'identifiant du noued a supprimer
$id = $_GET['id'];

/*on load le fichier xml*/
$data = new DOMDocument();
$data->load('bandeau.xml');

/*on recherche l'element qu'on veut supprimer dont l'id est
  passé en paramétre*/
$deletePhoto = $data->getElementById($id);

$parent = $data->getElementsByTagName('frenchQuality');

/*on le delete*/
$parent->removeChild($deletePhoto);

/*on sauve le xml*/
$data->save('bandeau.xml');
?>


Quand j'essaye ce code, cela me donne cette erreur :

Fatal error: Call to undefined method DOMNodeList::removeChild() in /home.10.7/webtoget/www/ideal/delete.php5 on line 19


J'espere que quelqu'un pourra m'aider.

Bonne soirée à tous.

Cordialement.
Dernière édition par Sylvano06 le Ven Mai 18, 2007 14:10, édité 1 fois.

honolulu
WRInaute impliqué
WRInaute impliqué
 
Messages: 942
Inscription: 8 Nov 2005

Message le Mer Mai 02, 2007 22:55

salut,
je crois que tu n'appliques pas la bonne méthode au bon objet, cf http://www.aliasdmc.fr/dom_javascript/j ... child.html :wink:


julienr
WRInaute impliqué
WRInaute impliqué
 
Messages: 913
Inscription: 5 Aoû 2003

Message le Jeu Mai 03, 2007 6:45

:)
euh ton lien c'est le dom js, je crois qu'il s'agit plutot de celui ci dans ce post ;)

honolulu
WRInaute impliqué
WRInaute impliqué
 
Messages: 942
Inscription: 8 Nov 2005

Message le Jeu Mai 03, 2007 9:02

arf, il était l'heure d'aller me coucher pour moi :oops:


Jeviensderio
WRInaute passionné
WRInaute passionné
 
Messages: 1340
Inscription: 29 Sep 2006

Message le Jeu Mai 03, 2007 12:48

$parent = $data->getElementsByTagName('frenchQuality');

Cette fonction retourne un DOMNodeList, il faudrait un DOMNode

$nodex = $parent->item(0);

ou $nodex = $parent[0];

Sylvano06
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 12
Inscription: 13 Fév 2006

Message le Jeu Mai 03, 2007 13:59

Merci beaucoup pour vous réponses, malheuresement je suis un peu entrain de me perdre. Si je comprend bien donc je récupére une liste de noeud.

Je suis un peu perdu :(

En faite, je voudrais récuperer le noeud photo qui correspond a l'identifiant passé par la méthode GET et ensuite supprimer ce noeud ainsi que ses enfants.

Je suis un perdu mais ca doit être le mauvais réveil. En tout cas merci pour toutes vos réponses.


julienr
WRInaute impliqué
WRInaute impliqué
 
Messages: 913
Inscription: 5 Aoû 2003

Message le Mar Mai 15, 2007 21:54

voici un code qui marche, il semblerait qu'il faille tout ou presque faire à la main (recherche des noeud, parcours et test des attributs), à confirmer

Code: Tout sélectionner
<?php
//on recupere l'identifiant du noued a supprimer
$id = $_GET['id'];

/*on load le fichier xml*/
$data = new DOMDocument();

$data->load('bandeau.xml');

$parent = $data->getElementsByTagName('photo');

for( $i=0; $i<$parent->length; $i++ ) {

   $attr = $parent->item($i)->attributes;
   for( $j=0; $j<$attr->length; $j++ ) {
      if( $attr->item($j)->nodeName == 'id' && $attr->item($j)->nodeValue == $_GET['id'] )
         $element = $parent->item($i);
   }

}

$racine = $data->documentElement;

$suppr = $racine->removeChild($element);

?>

Sylvano06
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 12
Inscription: 13 Fév 2006

Message le Mar Mai 15, 2007 23:38

Merci beaucoup pour ce bout de code, ça marche niquel :)


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: erestrebian et 2 invités