Page 1 sur 1

Simple XML : modifier contenu d'un noeud

Posté : 22 avr. 2009, 20:51
par supercanard
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>

Posté : 22 avr. 2009, 21:29
par orgerix
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.

Posté : 23 avr. 2009, 10:07
par Ryle
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 :)

Posté : 23 avr. 2009, 13:53
par supercanard
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);
}