Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche DOM).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/09/2007, 16h43   #1
Invité régulier
 
Inscription : avril 2004
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 13
Points : 9
Points : 9
Par défaut [SimpleXML] Modifier le champ d'un simplexml

Bonjour,
J'espère être dans la bonne partie du fofo

Après 4h de recherche infructueuse sous google ,

Bon voila : j'aimerai modifier le champ d'un objet simplexml (pas un de ses attributs)

un exemple vos mieux qu'un long discourt
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
$string ='<?xml version="1.0"?><document>
<textarea name="area1">1</textarea>
<textarea name="area2">2</textarea>
</document>';
 
$sXMLelt = simplexml_load_string($string);
 
foreach($sXMLelt as $key=>$elt)
{
	switch(strval($key))
	{
		case "textarea" :
			if(strval($elt->name)="area1")
				$elt->affecteValeur("area1 modifié");
			if(strval($elt->name)="area2")
				$elt->affecteValeur("area2 modifié");
			break;
		//.....
	}
}
 
echo $sXMLelt->asXML();
mais hélas je ne connait pas le vrai nom de la dîte fonction affecteValeur, ni la syntaxe

Merci d'avance
konkin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 19h05   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
De manière générale l'extension SimpleXML n'est pas la plus adaptée pour apporter des modifications à son document XML et la version de PHP (5) entre également en ligne de compte. Toutefois ici un simple : $elt = 'area1 modifié'; semble fonctionner (testé sur 5.2.3) ...
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2007, 00h20   #3
Invité régulier
 
Inscription : avril 2004
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 13
Points : 9
Points : 9
Merci j'y avais pensais mais ... J'ai la version PHP 5.2.0 (EasyPHP 2.0 beta 1)

et ça écrase la variable $elt par un string ...

je vais de ce pas regarder pour avoir la version 5.2.3 ^^

mais si vous avez une autre méthode je suis preneur
konkin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2007, 00h40   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par konkin
mais si vous avez une autre méthode je suis preneur
DOM Si j'ai bien compris vous pourriez faire la même chose ainsi :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$dom = DomDocument::loadXML($string);
 
foreach ($dom->documentElement->childNodes as $elt)
{
	switch ($elt->nodeName) 
	{
		case 'textarea':
			if ($elt->getAttribute('name') == 'area1')
				$elt->nodeValue = utf8_encode('area1 modifié');
			if ($elt->getAttribute('name') == 'area2')
				$elt->nodeValue = utf8_encode('area1 modifié');
			break;
		//.....
	}
}
 
echo $dom->saveXML();
Par contre j'ai déjà vu plus simple dans l'utilisation de SimpleXML :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$sXMLelt = simplexml_load_string($string);
 
foreach ($sXMLelt as $elt)
{
	switch ($elt->getName())
	{
		case 'textarea':
			if ($elt['name'] == 'area1')
				$elt[0] = utf8_encode('area1 modifié');
			if ($elt['name'] == 'area2')
				$elt[0] = utf8_encode('area2 modifié');
			break;
		//.....
	}
}
 
echo $sXMLelt->asXML();
(des tests au niveau des attributs s'imposent certainement)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2007, 00h40   #5
Invité régulier
 
Inscription : avril 2004
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 13
Points : 9
Points : 9
pour
Citation:
$elt = 'area1 modifié';
je viens de récupérer la dernier version de PHP (5.2.4)

Et hélas ça me fais la même chose ...

donc pas encore résolu

Je vous dit bonne nuit et à bientôt j'espère
konkin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2007, 00h48   #6
Invité régulier
 
Inscription : avril 2004
Messages : 13
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 13
Points : 9
Points : 9
Merci julp

Citation:
$elt[0] =utf8_encode('area1 modifié');
Ca marche parfaitement cool

Ca buguer dans la version 5.2.0 ^^ d'ailleurs

tu es un

@+ merci pour tout
konkin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h28.


 
 
 
 
Partenaires

Hébergement Web