
Aujourd’hui, le XML est un format incontournable sur le web. Toutes les API des services web2.0
renvoient des fichiers XML contenant les résultats de la requête. Il est donc vital de savoir correctement lire un fichier XML. Nous allons donc faire ça en utilisant des fonctionnalités native dans PHP5 : SimpleXML Heureusement pour nous, PHP5 a grandement simplifié la lecture d’un fichier XML par rapport à PHP4, c’est donc avec ces nouvelles fonctions que je vais travailler. Imaginons donc que l’on veuille lire un fichier comme ceci :
-
<?xml version="1.0" encoding="windows-1250"?>
-
<famille nom="SmashingCoding">
-
<membres>
-
<membre nom="Chris" type="fondateur" />
-
<membre nom="Tom" type="contributeur" />
-
<membre nom="Gérald" type="contributeur" />
-
<membre nom="Nicolas" type="contributeur" />
-
<membre nom="Tomtom" type="contributeur" />
-
</membres>
-
<competences>
-
<competence nom="PHP" membre="Tomtom" />
-
<competence nom="MySQL" membre="Chris" />
-
<competence nom="CSS" membre="Tom" />
-
<competence nom="Ajax" membre="Tomtom" />
-
<competence nom="XHTML" membre="Gérald" />
-
<competence nom="Référencement" membre="Gérald" />
-
<competence nom="Ajax" membre="Nicolas" />
-
</competences>
-
</famille>
On commence donc par ouvrir le fichier XML :
-
# On peut remplacer fichier.xml par une URL
-
$file = ‘fichier.xml’;
-
# On initialise l’objet $xml
-
$xml = simplexml_load_file($file);
A partir de là, on a fait le plus dur. Il ne reste plus qu’a parcourir le fichier. La syntaxe est très simple à retenir :
-
# Atteindre le noeud ‘nom_du_noeud’
-
$xml->nom_du_noeud;
-
# Atteindre le noeud fils ‘nom_du_noeud2′ du noeud père ‘nom_du_noeud1′
-
$xml->nom_du_noeud1->nom_du_noeud2;
-
# Lire l’attribut ‘titre_attribut’ du noeud ‘nom_du_noeud’
-
$xml->nom_du_noeud[‘titre_attribut’];
Imaginons que l’on veuille par exemple récupérer la liste des membres de la famille SmashingCoding
:
Ce qui affichera :
Liste des membres :
- Chris est membre et fondateur de la famille SmashingCoding
- Tom est membre et contributeur de la famille SmashingCoding
- Gérald est membre et contributeur de la famille SmashingCoding
- Nicolas est membre et contributeur de la famille SmashingCoding
- Tomtom est membre et contributeur de la famille SmashingCoding
Mais on peut aller plus loin. Imaginons que l’on veuille maintenant récupérer la liste des compétences par utilisateur :
-
echo ‘<p>Liste des membres :</p><ul>’;
-
foreach($xml->famille->membres->membre as $membre) {
-
$res = ”;
-
foreach($xml->famille->competences->competence as $competence) {
-
if($competence[‘membre’] == $membre[‘nom’]) $res .= $competence[‘nom’].‘ ‘;
-
}
-
$item = ‘<li>’.$membre[‘nom’].‘ est membre et ‘.$membre[‘type’].‘ de la famille ‘.$xml->famille[‘nom’].‘ %s</li>’;
-
}
-
echo ‘</ul>’;
On obtiendra donc :
Liste des membres :
- Chris est membre et fondateur de la famille SmashingCoding (MySQL)
- Tom est membre et contributeur de la famille SmashingCoding (CSS)
- Gérald est membre et contributeur de la famille SmashingCoding (XHTML Référencement)
- Nicolas est membre et contributeur de la famille SmashingCoding (Ajax)
- Tomtom est membre et contributeur de la famille SmashingCoding (PHP Ajax)
Finger in the nose! Maitenant, vous aussi vous pouvez faire joujou avec les API





salut !
bon tuto, mais en fait j’arrive pas à le faire marcher…
je fait bien un fichier XML et mon php est sensé le lire (il se charge bien avec le simplexml_load_file)
mais il me fait une reeur sur le foreach :
foreach($xml->famille->membres->membre as $membre)
il me renvoi un
invalid argument supplied for foreach()
en faisant un print_r juste avant je voit bien que mon fichier est xml est chargé et j’ai vraiment pris celui de l’exemple…
donc je comprend pas… une piste ?
merci d’avance !