Naviguer dans un fichier xml

Résolu
fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   -  
fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, je souhaiterai lister certaines informations d'un fichier xml sur une page php. Sauf que je ne vois pas comment naviguer dans cette arborescence...

<entry>
<pays>France</pays>
<regime>Regime_fr</regime>
</entry>
<entry>
<pays>Espagne</pays>
<regime>Regime_esp</regime>
</entry>
<entry>
<pays>Allemagne</pays>
<regime>Regime_all</regime>
</entry>
<entry>
<pays>Italie</pays>
<regime>Regime_ita</regime>
</entry>


Je ne vois vraiment pas comment faire...

3 réponses

  1. xMiLeY Messages postés 73 Statut Membre 7
     
    $xml = simplexml_load_file("tonfichierxml");

    $entries = ($xml->entry);

    foreach($entries as $entry)
    {
    echo $entry->pays;
    echo $entry->regime;
    }
    1
  2. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Tu peux utiliser DOM ou SimpleXMLElement (plus simple que DOM).
    Je t'envoie sur le doc de PHP pour en savoir plus :
    - http://fr.php.net/dom
    - https://www.php.net/simplexml
    1
    1. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
       
      en fait avec dom j'arrive a récupérer les informations avec les attributs :

      $dom = new DomDocument();
      $dom->load('char.xml'); 
      $liste = $dom->getElementsByTagName("pays");
      
        foreach($liste as $pays){
          
      	echo $pays->nodeValue;
      	if ($pays->hasAttribute("value")) {echo $pays->getAttribute("value");}
      	
      	echo "<BR />";
      	}


      Mais comment lui faire dire que c'est le <pays> de <continent2> que je veux afficher uniquement ?
      0
    2. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      <?php
      $dom = new DomDocument();
      $dom->load('char.xml'); 
      
      $continant2 = $dom->getElementsByTagName('continent2')->item(0);
      $liste = $continant2->getElementsByTagName("pays");
      
      foreach($liste as $pays){
      	echo $pays->nodeValue;
      	if ($pays->hasAttribute("value"))
      		echo $pays->getAttribute("value");
      	echo "<br />";
      }
      ?>
      0
    3. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
       
      Donc si je comprend bien,
      $continant2 = $dom->getElementsByTagName('continent2')->item(0);


      Dit que la balise continent2 va etre item(0), cela veut dire que continent 2 est parent, et apres on lui passe une variable et puis apres ca repart pareil ?
      0
    4. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      getElementsByTagName retourne une liste de noeud (DOMNodeList), même s'il n'y a qu'une balise portant le nom "continent2". Pour récupérer la première (et la seule) balise dans la liste, il faut utiliser la méthode item() (0 = première balise, 1 = la seconde, ...).

      Ensuite, en appelant $continant2->getElemetsByTagName, ça n'ira chercher que les noeud à l'intérieur de $continant2 (qui est la balise <continent2>).
      0
    5. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
       
      merci beaucoup
      0
  3. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
     
    Merci, ca fonctionne bien !

    J'ai un deuxieme souci de navigation pour identifier certaines balises :

    <continent1>
    <pays value="8" />
    <population value="999" />
    </continent1>
    <continent2>
    <pays value="10" />
    <population value="888" />
    </continent2>


    Comment afficher que les value du continent 2 ?
    0