Naviguer dans un fichier xml

Résolu
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. $xml = simplexml_load_file("tonfichierxml");

    $entries = ($xml->entry);

    foreach($entries as $entry)
    {
    echo $entry->pays;
    echo $entry->regime;
    }
    1
    1. 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. 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. <?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. 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. 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. merci beaucoup
        0
    2. 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

      Discussions similaires

      question pix mot caché

      7 réponses