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

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

Sylvano06
Nouveau WRInaute
 
Messages: 12
Inscription: Lun Fév 13, 2006 14:34

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 passionné
WRInaute passionné
 
Messages: 629
Inscription: Mar Nov 08, 2005 12:03

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 passionné
WRInaute passionné
 
Messages: 865
Inscription: Mar Aoû 05, 2003 14:49

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 passionné
WRInaute passionné
 
Messages: 629
Inscription: Mar Nov 08, 2005 12:03

Message le Jeu Mai 03, 2007 9:02

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


Jeviensderio
WRInaute accro
WRInaute accro
 
Messages: 1340
Inscription: Ven Sep 29, 2006 12:50

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
 
Messages: 12
Inscription: Lun Fév 13, 2006 14:34

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 passionné
WRInaute passionné
 
Messages: 865
Inscription: Mar Aoû 05, 2003 14:49

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
 
Messages: 12
Inscription: Lun Fév 13, 2006 14:34

Message le Mar Mai 15, 2007 23:38

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


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: mhsoft et 0 invités