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...
A voir également:

3 réponses

xMiLeY Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   7
 
$xml = simplexml_load_file("tonfichierxml");

$entries = ($xml->entry);

foreach($entries as $entry)
{
echo $entry->pays;
echo $entry->regime;
}
1
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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
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
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
<?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
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
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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
fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
 
merci beaucoup
0
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