Les
itérateurs SimpleXML
Pour conclure notre article, nous allons vous présenter
une autre partie de PHP 5 : les itérateurs. Les itérateurs
sont une notions qui dépasse le cadre de SimpleXML, mais
qui s'y applique très bien. Ils fournissent une interface
standard pour des opérations courantes en PHP : passer en
revue tous les éléments d'une ressource. Cette ressource
peut être une simple liste, comme une table SQL, des enregistrements
LDAP ou un tableau, ou encore multidimensionnel, comme des
tableaux imbriqués, un système de fichiers ou un fichier
XML ; ce peut être une ressource avec un curseur (possibilité
d'avancer ou de reculer la position de lecture, comme dans
un fichier local), ou sans retour en arrière (cas d'un processus
ou d'une socket). Voici un aperçu des différentes classes
disponibles en PHP ou comme exemple de la bibliothèque SPL
(cliquez sur l'image à droite pour l'afficher à
taille lisible).
La classe SimpleXMLIterator
se situe comme ceci dans la hiérarchie :
Il s'agit donc d'une classe qui peut être transmise à une
boucle foreach (Iterator),
et qui peut être récursive (RecursiveIterator).
Iterator
<?php
$xml =<<<EOF
<?xml version='1.0'?>
<!DOCTYPE sxe SYSTEM "notfound.dtd">
<xml id="elem1">
<a>1</a>
<a>2</a>
<c>3</c>
</xml>
EOF;
$sxe = simplexml_load_string($xml, 'SimpleXMLIterator');
for ($sxe->rewind(); $sxe->valid(); $sxe->next()) {
print $sxe->key()." : ".$sxe->current()."\n";
}
?>
Voici comment passer en revue les différentes balises contenue
dans la balise XML, pour en afficher le nom et le contenu.
La boucle for() utilisée
ici revient à cette boucle foreach()
;
foreach($sxe as $cle => $valeur)
{
print "$cle : $valeur\n";
}
En interne, PHP transforme la boucle foreach ci-dessus en
boucle for() et utilise
les mêmes fonctions. Ici, la notation SimpleXML est plus
facile à utiliser et lire que la notation Iterator.
|
Forum |
|
Réagissez
dans les
forums de JDN Développeurs
|
Dès que vous aurez des opérations plus complexes à faire
sur le code XML qu'un simple foreach(),
tout en passant en revue le document XML, balise après balise,
SimpleXMLIterator sera une bonne solution : elle vous apporte
une approche tableau, similaire aux fonctions de tableaux
de PHP 5. Ainsi, les méthodes next()
et key() font le même travail
que les fonctions tableau next()
et key(), et les
méthodes rewind(), current()
et valid() correspondent
aux fonctionnalités de reset(),
current() et end().
Votre ressource XML est donc assimilable un tableau à part
entière.