Affiche contenu fichier xml en php

Résolu
Flatbeat Messages postés 35 Statut Membre -  
 Utilisateur anonyme -
Salut, ma question est toute bête mais ça m'énerve, j'ai un fichier xml de ce type

<personne>
<nom>george</nom>
<enfant>bob</enfant>
</personne>
<personne>
<nom>sylvain</nom>
<enfant>luc</enfant>
<enfant>alphonse</enfant>
</personne>

Je veux afficher une liste des noms et pour chaque nom, afficher une liste avec les enfants (il peut y en avoir aucun, un ou plusieurs) en php. J'ai fait cela mais je n'arrive pas a afficher les enfants.

$dom = new DomDocument;
$dom->load("fichier.xml");

$personne = $dom->getElementsByTagName('personne');
$i=0;

echo "<ul>";
foreach($personne as $personne_nom)
 {
        echo "<li>";
	echo personne_nom->firstChild->nodeValue;
        echo "</li>";
}
echo "</ul>";


merci d'avance !
Configuration: Windows XP
Firefox 3.0.10

1 réponse

  1. Flatbeat Messages postés 35 Statut Membre 1
     
    Je réponds à moi même vu que j'ai trouvé la réponse :). J'ai utilisé simpleXML

    $fichierxml = simplexml_load_file('fichier.xml'); 
    foreach($fichierxml->personne as $personne) 
    {
        echo "<b>$personne->nom</b><br>";
        
        foreach($personne->enfant as $enfant) 
        {
        	echo "$enfant<br>";
        }
    }
    0
    1. Utilisateur anonyme
       
      Salut !

      J'étais entrain de le faire donc je te répond quand même ^^

      Le problème déjà est ta structure. un fichier XML correct serait comme ça
      ----------fcihier.xml--------------
      <?xml version="1.0" encoding="ISO-8859-1" ?>
      <!DOCTYPE personnes SYSTEM "fichier.dtd">
      <personnes>
      	<personne>
      		<nom>Nom1</nom>
      		<enfants>
      			<enfant>enfant1</enfant>
      		</enfants>
      	</personne>
      	<personne>
      		<nom>Nom2</nom>
      		<enfants>
      			<enfant>enfant1</enfant>
      			<enfant>enfant2</enfant>
      		</enfants>
      	</personne> 
      </personnes>
      
      ----------fichier.dtd--------------
      <!ELEMENT personnes (personne*)>
      <!ELEMENT personne (nom, enfants)>
      <!ELEMENT nom (#PCDATA)>
      <!ELEMENT enfants (enfant*)>
      <!ELEMENT enfant (#PCDATA)>
      


      Ensuite il faut récupérer élément par élément, une manière plus propre et plus ordonnée.

      ----------fichier.php-----------
      <?php
      
      $dom = new DomDocument;
      $dom->load("fichier.xml");
      
      $racine = $dom->documentElement;
      $personne = $racine->getElementsByTagName('personne');
      
      
      if(@$dom->validate())
      {
      	foreach($personne as $contenu)
      	{
      		echo "<ul>";
      
      		$nom = $contenu->getElementsByTagName('nom');
      		echo "<li>";
      			echo $nom->item(0)->firstChild->nodeValue;
      		echo "</li>";
      
      		$enfants = $contenu->getElementsByTagName('enfants');
      		$enfant = $enfants->item(0)->getElementsByTagName('enfant');
      
      		foreach($enfant as $value)
      		{
      			echo "<li>";
      				echo $value->firstChild->nodeValue;
      			echo "</li>";
      		 }
      		echo "</ul>";	
      	}
      	
      }
      else $dom->validate();
      
      


      Bon courage ^^
      0