Aller au contenu

SimpleXML


Sujets conseillés

Posté

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:

Posté (modifié)

Bonjour,

$fkGroupe n'est pas un tableau mais un objet SimpleXMLElement

L'instruction $fkGroupe[0] n'a pas de sens :)

Modifié par Dash
Posté

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);

Posté

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

(ou je n'ai pas compris la fonction ? )

Posté

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:

Posté

_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.

  • 2 years later...
Posté

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 ?

Veuillez vous connecter pour commenter

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



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