Simple XML : modifier contenu d'un noeud

Mammouth du PHP | 531 Messages

22 avr. 2009, 20:51

Bonsoir,

J'ai visiblement un petit soucis pour modifier le contenu d'un noeud avec simple XML. Il y a quelquechose qui doit m'échapper... je n'obtient pas d'erreur mais le fichier ne bouge pas

Je fait la chose suivante :
<?php

$config = simplexml_load_file('global/config.xml');
	foreach($config->item as $param){
		$param->v = 'toto';
	}
}
?> 
Avec un fichier de base qui ressemble à ça :

Code : Tout sélectionner

<?xml version="1.0"?> <config> <item> <l>blabla</l> <k>blabla</k> <v>blabla</v> </item> <item> <l>blabla</l> <k>blabla</k> <v>blabla</v> </item> </config>

Mammouth du PHP | 693 Messages

22 avr. 2009, 21:29

Question bête : tu sauvegardes ton arborescence xml ensuite ?

Parce que SimpleXML charge l'arborescence integralement pour travailler dessus après. Ensuite il faut soit afficher l'arborescence, soit la sauvegarder dans un fichier.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 avr. 2009, 10:07

Hum... dans une boucle de type foreach, tu copies une valeur dans une variable qui est réinitialisée à chaque itération... Résultat, en sortir de boucle, ta variable $param contient la dernière valeur qui lui a été affectée (les précédentes étant écrasées au fur et à mesure) et ton tableau n'est pas modifié (il est seulement parcouru)
foreach ($config->item as $param) 
ici, tu copies tour à tour, la valeur de chaque élément du tableau $config->item dans une variable $param, dont le seul lien qu'il pourrait y avoir avec le tableau est de contenir la même valeur que l'une de ses cellules :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 531 Messages

23 avr. 2009, 13:53

Oups j'ai oublié de mettre résolu.

Entre temps je me suis rendu compte, comme orgerix le soulevais que je ne sauvegardais pas...

Voilà le code complet qui marche, avec le strval à ne pas oublé sinon c'est le crash ;)
if(isset($_POST['submitConfig'])){
	$i = 0;
	foreach($config->item as $param){
		$key = strval($param->k);
		if($key != 'submitConfig'){
			$param->v = $_POST[$key];
			$i++;
		}
	}

$xml = $config->asXML();
file_put_contents('global/config.xml', $xml);
}