Page 1 sur 1

SimpleXML et addChild

Posté : 19 juin 2013, 10:52
par Reverso
Bonjour,

Je met en place un script de connexion à un webservice interrogé en REST.
Le serveur sur lequel étant hébergé ce webservice disposant de certaines limitations en terme d'interrogation et parceque le flux XML renvoyé par le serveur étant inutilement alourdi, j'ai décidé, avant de mettre en cache sur mon propre serveur les information, de "réécrire" le flux XML.

Voici la partie du flux XML retourné après interrogation sur laquelle je bute :

Code : Tout sélectionner

... <CollectionCaracteristique> <Caracteristique IdCaracteristique="25"/> <Caracteristique IdCaracteristique="36"/> <Caracteristique IdCaracteristique="41"/> <Caracteristique IdCaracteristique="42"/> </CollectionCaracteristique> <CollectionComplement> <Complement> <Libelle> <Contenus> <Contenu IdLangue="it">Accès internet</Contenu> </Contenus> </Libelle> </Complement> <Complement> <Libelle> <Contenus> <Contenu IdLangue="it">Anglais parlé</Contenu> </Contenus> </Libelle> </Complement> <Complement> <Libelle> <Contenus> <Contenu IdLangue="it">Animations (Loisirs à  proximité)</Contenu> </Contenus> </Libelle> </Complement> <Complement> <Libelle> <Contenus> <Contenu IdLangue="it">Animaux interdits</Contenu> </Contenus> </Libelle> </Complement> </CollectionComplement> ...
Donc pour explication, on a dans deux parties distinctes dans lesquelles on retrouve des id de caracteristiques et dans une seconde partie le descriptif (avec un code de lanque "it" alors que c'est pas de l'italien... mais passons)
Je souhaite réécrire cette partie du flux de la façon suivante :

Code : Tout sélectionner

... <caracteristics> <caracteristic id="25">texte</caracteristic> <caracteristic id="36">texte</caracteristic> <caracteristic id="41">texte</caracteristic> <caracteristic id="42">texte</caracteristic> </caracteristics> ...
Voici le code que j'utilise pour constituer cette partie :
//Caracteristics node
$carId = array();
$carTexts = array();
foreach($node->CollectionCaracteristique->Caracteristique as $car)
	$carId[] = $car->attributes()->IdCaracteristique;
foreach($node->CollectionComplement->Complement as $carText)
	$carTexts[] = $carText->Libelle->Contenus->Contenu;
			
$car = $apt->addChild('caracteristics');
for($i = 0;$i < count($carId);$i++)
	$car->addChild('caracteristic',$carTexts[$i])->addAttribute('id',$carId[$i]);
Et voici le XML généré (objet SimpleXML) :

Code : Tout sélectionner

[caracteristics] => SimpleXMLElement Object ( [caracteristic] => Array ( [0] => Acc├â┬¿s internet [1] => Anglais parl├â┬® [2] => Animations (Loisirs ├â┬á├é┬á proximit├â┬®) [3] => Animaux interdits ) )
En dehors de l'encodage du flux récupéré qui part en sucette (faut que je me penche dessus), je n'arrive pas à faire en sorte que l'objet SimpleXML se construise de la façon dont je souhaite mon flux.
Une idée d'où vient le problème et comment y remédier ?

Merci

Re: SimpleXML et addChild

Posté : 19 juin 2013, 14:57
par Reverso
Alors étrangement, bien que le '"print_r" de l'objet XML ne soit pas bon, la sortie de l'objet avec la méthode asXML() retourne le résultat attendu !
Le post est donc à clôturer.