SimpleXML et addChild

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : SimpleXML et addChild

Re: SimpleXML et addChild

par Reverso » 19 juin 2013, 14:57

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.

SimpleXML et addChild

par Reverso » 19 juin 2013, 10:52

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