Récupérer valeur d'une balise xml avec php

mike571 -  
 mike571 -
Bonjour,

Après avoir essayer tout ce que j'ai pu trouver.. Je ne trouve pas la solution à mon problème. Je dois récupérer une valeur dans un flux xml chargé sur la même page.

Pas de problème pour récupérer les valeurs des éléments parent de premier niveau. Mais impossible d'accéder aux "enfants"...

Mon xml est dans une variable $response

code xml
  <?xml version="1.0" encoding="UTF-8"?>
<response>
  <content>
    <objetList>
      <objet>
        <status>disponible</status>
        <name>nom de l'objet</name>
      </objet>
    </objetList>
  </content>
</response>


Je souhaite récupérer la valeur de la balise status et name.
Voici ce que j'ai essayé
$simplexml = simplexml_load_string($response);

$status = $simplexml->content->objetList->objet;
print "status: {$status->status} <br />\n";


Résultat : Affiche uniquement "status:"

Autre essai :

$simplexml = simplexml_load_string($response);
foreach ($simplexml->content as $content) {
  foreach ($content->objetList as $objetList) {
	foreach ($objetList->objet as $objet) {
		print "status : {$objet->status} <br />\n";
	}
  }
  }


Sachant que le code ci-dessous me renvoi bien l'ensemble des données présentes dans le xml
<?php
// affiche le contenu de notre object simplexml
print_r($simplexml);
?>	


J'ai aussi essayé avec :
$simpleXml = new SimpleXMLElement($response);
à la place de
$simplexml = simplexml_load_string($response);

Mais sans résultat..

Une idée ?

1 réponse

  1. guilllaume
     
    print "status: {$status->status} <br />\n";


    Tu lui demandes d'afficher status alors il execute status.

    ajoute un
    print "Nom: {$name->name} 
    0
    1. mike571
       
      Merci pour ta réponse,

      Mais justement il affiche "status:"

      Mais pas la valeur de status..

      Je voudrais qu'il affiche :

      "status: disponible"
      0
    2. guillaume
       
      ok je n'avais pas compris ca.

      essaye un truc comme ca :



      $reponse = simplexml_load_file($mon_fichier_xml);  
      $i=1;
      foreach ($reponse->objet as $objet) {
      $statut=$objet->status;
      $name=$name->name;
      
      echo $statut;
      echo $name;
      $i++;
      }
      
      
      0
    3. guillaume
       
      Petite erreur :
      $name=$objet->name; et pas $name=$name->name;
      0
    4. mike571
       
      Non, ça me donne une erreur:

      Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "<?xml version="1.0" encoding="UTF-8"?>


      Je précise aussi que j'ai plusieurs balises qui ont le nom 'objet"

      le xml est plutot comme ceci:
      <response>
      <objet></objet>
        <content>
          <objetList>
            <objet>
              <status>disponible</status>
              <name>nom de l'objet</name>
            </objet>
          </objetList>
        </content>
      </response>
      0