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

  • Auteur de la discussion Auteur de la discussion Sylvano06
  • Date de début Date de début
Nouveau WRInaute
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:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<frenchQuality>
  <photo id="0">
    <image>img/img1.jpg</image>
    <url>https://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:
<?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.
 
WRInaute passionné
$parent = $data->getElementsByTagName('frenchQuality');

Cette fonction retourne un DOMNodeList, il faudrait un DOMNode

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

ou $nodex = $parent[0];
 
Nouveau WRInaute
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.
 
WRInaute impliqué
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:
<?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);

?>
 
Discussions similaires
Haut