Php - Problème avec XML

Résolu
Bonjour à tous,

J'ai un fichier XML comme ceci :

<?xml version='1.0' standalone='yes'?>
<menus>
	<menu>
		<nom>bo</nom>
		<ss_menus>
			<ss_menu>
				<ss_nom>aaa</ss_nom>
			</ss_menu>
			<ss_menu>
				<ss_nom>bbb</ss_nom>
			</ss_menu>
		</ss_menus>
	</menu>
	<menu>
		<nom>bw</nom>		
		<ss_menus/>						
	</menu>	

	<menu>
		<nom>qlikvaaaaa</nom>
		<ss_menus/>	
	</menu>
</menus> 


Et j'aimerais pouvoir supprimer le menu portant le nom 'qlikvaaaaa', or j'ai tout essayé mais je n'y arrive pas. PHP ne me génère aucune erreur, mais le script ne fait rien...

Voila mon code :
$menu=htmlspecialchars($_POST['choix']); 
	


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

	$dom->load('../menu.xml');

	$parent = $dom->getElementsByTagName('menu');
	
	for($i=0; $i<=$parent->length-1; $i++) 
	{	
		 $listeMenu = $parent->item($i)->getElementsByTagName('nom');
		 foreach($listeMenu as $liste) 
		 {
			if($liste->firstChild->nodeValue == $menu)
			{
				$element = $parent->item($i);
			}         
		 }
	}

	$dom->documentElement->removeChild($element);	
	$dom->saveXML();


Merci pour votre aide !

4 réponses

  1. Salut.

    Je n'avais pas lu les autres réponses alors, pour ne pas avoir codé pour rien, voici mon code un peu plus court que le tiens :

    <?php
    // Création de l'objet DOM
    $dom = new DOMDocument('1.0');
    $dom->loadXML($xml);
    
    // Recherche de l'élément
    $noms = $dom->getElementsByTagName('nom');
    foreach($noms as $nom) {
    	if($nom->textContent == 'qlikvaaaaa') {
    		// Suppression
    		$nom->parentNode->removeChild($nom);
    	}
    }
    
    // Affichage du XML (pas de sauvegarde de la modif.)
    echo $dom->saveXML();
    ?>
    1. Nikel merci pour votre aide !
  2. ->saveXML() renvoi un String qui contient le XML
    ->save(fichier), sauve dans un fichier
    moi aussi je me suis cassé les dents là dessus

    Cordialement
    1. Merci pour l'info ;)
  3. Ouaah nikel sa marche !

    Merci beaucoup !

    Juste, j'aimerais savoir c'est quoi la différence entre les 2 ?
    1. Bonjour,

      Faites juste ça

      $dom->save('menu.xml');

      à la place de

      $dom->saveXML();

      Cordialement