Affiche contenu fichier xml en php

Résolu/Fermé
Flatbeat Messages postés 30 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 7 février 2010 - 26 mai 2009 à 10:16
 Utilisateur anonyme - 26 mai 2009 à 11:21
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 !
A voir également:

1 réponse

Flatbeat Messages postés 30 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 7 février 2010 1
26 mai 2009 à 10:50
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
Utilisateur anonyme
26 mai 2009 à 11:21
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