(Ceci est la première partie de ce tutoriel. Il est
recommandé de lire la
seconde partie.)
SimpleXML est une des deux nouvelles extensions de PHP
5 consacrées à XML. L'autre est DOM,
qui a évolué de domxml.
Contrairement à cette dernière, SimpleXML est une approche
nouvelle du traitement des fichiers XML. Elle met en avant
la simplicité d'utilisation.
Jusqu'à présent, pour accéder à des fichiers XML, il fallait
choisir entre deux méthodes : les expressions régulières
et l'extension xml. La première
méthode était idéale pour créer rapidement des solutions
à une situation donnée. Grâce à la fonction preg_match(),
et en travaillant habilement ses expressions, on arrivait
facilement à transformer un fichier XML en un tableau associatif
organisé. Avec un peu d'habitude, on arrivait même à gérer
les attributs.
Toutefois,
cette solution devait rester très proche du fichier XML
à traiter : dès que ce dernier changeait, il fallait adapter
les expressions régulières. Quant à traiter certaines situations
complexes, comme les balises imbriquées ou les CDATA, cela
devenait le cauchemar. Mais pour une solution rapide et
bien maîtrisée, cela se révélait redoutable.
D'un autre coté, il y avait l'extension
xml,
qui reposait sur la bibliothèque
expat.
Cette bibliothèque est bien plus compétente avec subtilités
de XML, mais imposait la configuration de nombreux gestionnaires.
Avant même de penser à utiliser cette bibliothèque, il fallait
donc bien comprendre la documentation et XML, et le premier
résultat n'arrivait qu'avec plusieurs heures de travail.
On avait donc le choix entre la solution rapide et éphémère,
et la solution lourde et robuste.
SimpleXML aborde justement le problème des fichiers XML
simples. Prenez un fichier XML comme celui-ci :
<?xml version="1.0" encoding="utf-8"?>
<bibliotheque>
<style id="roman">
<livre>
<titre>La fortune
des Rougon</titre>
<auteur>Emile Zola</auteur>
</livre>
<livre>
<titre>Hernani</titre>
<auteur>Victor Hugo</auteur>
</livre>
</style>
<style id="fiction">
<livre>
<titre>Le seigneur
des anneaux</titre>
<auteur>J.R.R. Tolkien</auteur>
</livre>
</style>
</bibliotheque>
Le document est éminemment lisible par un humain ainsi que
par une machine. Sa structure est claire et facile à comprendre,
même sans DTD. Le fichier XML est stocké sous le nom de
'livres.xml'. Pour le traiter avec SimpleXML, il suffit
de le charger avec ces quelques lignes.
<?php
$bibliotheque = simplexml_load_file('livres.xml');
foreach ($bibliotheque->style as $style) {
print "\nType {$style['id']} <br />\n";
foreach ($style->livre as $livre) {
print "Titre : {$livre->titre} <br
/>\n";
print "Auteur : {$livre->auteur}
<br />\n";
}
}
?>
Il serait difficile de faire plus simple. La première ligne
charge le contenu du fichier livres.xml, dans la ressource
$bibliotheque. Le fichier
est lu en entier, et le contenu XML est validé par la bibliothèque
libxml2. Si le document n'est pas compatible XML, alors
les erreurs d'analyse sont affichées dans la page, et $bibliothèque
reçoit le booléen false.
Alternativement, SimpleXML vous propose la fonction
simplexml_load_string().
Cette dernière fonctionne comme
simple_load_file(),
mais attend le contenu XML dans une chaîne de caractères.
Le traitement appliqué est le même que dans le cas des fichiers.
Ainsi, si vos données XML sont déjà en mémoire, il n'y a
pas besoin de les écrire sur le disque pour les traiter.
C'est le cas si vous avez obtenu ces données depuis une
base de données, ou via une ressource réseau.