Aller au contenu

SimpleXML


Ace

Sujets conseillés

Hello !

Là je suis dans la 4ème dimension !

J'ai un objet SimpleXML de cette forme (obtenu avec un print_r)

print_r($simple_xml);

resultat :

SimpleXMLElement Object
(
   [idLogs] => 1
   [actif] => true
   [groupe] => SimpleXMLElement Object
       (
           [fkGroupe] => Array
               (
                   [0] => 3
                   [1] => 4
               )

       )

)

obtenu à partir de ce flux XML :

<membre>
   <idLogs>1</idLogs>
   <actif>true</actif>
   <groupe>
       <fkGroupe>3</fkGroupe>
       <fkGroupe>4</fkGroupe>
   </groupe>
</membre>

J'aimerais récupérer le 3 et le 4 qui se trouve dans l'élément fkGroupe.

Je fais donc ceci :

if (isset($simple_xml->groupe->fkGroupe)) {
     foreach ($simple_xml->groupe->fkGroupe as $fkGroupe) {
         $tab_groupes[] = $fkGroupe;
     }
 } else {
   $tab_groupes = array(1);
 }
 
 print_r($tab_groupes);

Et voilà ce que j'obtiens :

Array ( 
 [0] => SimpleXMLElement Object ( [0] => 3 )
 [1] => SimpleXMLElement Object ( [0] => 4 )
)

Si je rajoute un [0] après le $fkGroupe comme ceci :

if (isset($simple_xml->groupe->fkGroupe)) {
     foreach ($simple_xml->groupe->fkGroupe as $fkGroupe) {
         $tab_groupes[] = $fkGroupe[0]; //juste là.
     }
 } else {
   $tab_groupes = array(1);
 }
 
 print_r($tab_groupes);

Le résultat du print_r est le suivant :

Array ( [0] => [1] => )

:wacko: Ou est le juste milieu ??? :wacko:

Lien vers le commentaire
Partager sur d’autres sites

print_r() est trompeur. Il te donne l'intérieur d'un objet, malheureusement les objets simpleXML utilisent à fond les possibilités PHP5 et ont pas mal de comportements "magiques".

Pour récupérer le contenu textuel d'un noeud, il faut simplement essayer d'afficher ce noeud avec echo ou print. Au lieu de faire un print_r($tab_groupes) essayes plutot de faire un foreach($tab_groupes as $grp) echo "grp : $grp <br/>" ;

Si tu veux récupérer le texte sans l'afficher, il te faudra passer par strval($grp);

Lien vers le commentaire
Partager sur d’autres sites

Merci !

En effet, je me mélange un peu les pinceaux entre l'affichage d'un print_r() et d'un simple echo.

Je récupérais effectivement ce qu'il fallait. Par contre, j'ai toujours une erreur, mais je n'ai pas encore réussi à l'isoler...

Je posterai peut-être une nouvelle question très prochainement :blush:

Lien vers le commentaire
Partager sur d’autres sites

_AT_Anonymus : "

Quel intéret de strval($grp), alors qu'il retourne la même chose que $grp ?"

Il ne retourne pas la même chose. $grp est un objet, strval($grp) est un texte. Quand tu utilises $grp dans une chaîne PHP fait la conversion tout seul, mais si tu souhaites pouvoir envoyer ta donnée à une fonction tierce pas forcément conciliante, il te faudra peut être passer par strval() avant pour être sûr de n'envoyer que le contenu sans l'enrobage SimpleXML. L'exemple type c'est justement celui d'Ace : si il envoie $grp à print_r() ça lui donne des résultats étranges, si il passe d'abord par un strval(), tout rentre dans l'ordre.

Lien vers le commentaire
Partager sur d’autres sites

  • 2 years later...

Remontage brutal :)

J'utilise SimpleXML, et en particulier strval pour récupérer la valeur d'un element en tant que string.

Par exemple :


var_dump($item);

// Resultat (partiel) :
["group"]=>
object(SimpleXMLElement)#12 (1) {
["content"]=>
array(3) {
[0]=>
object(SimpleXMLElement)#13 (0) {
}
[1]=>
object(SimpleXMLElement)#14 (0) {
}
[2]=>
object(SimpleXMLElement)#15 (0) {
}
}
}

Je voudrais pouvoir faire un 'simple' :

$group = $item->group;

Mais ca ne renvoie aucune valeur.

J'ai essayé :

$group = (array) $item->group;

Qui ne fonctionne pas plus.

Une idée ?

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...