Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Hyacinthe MENIET
27 juillet 2007
Je vais indiquer dans ce document, comment manipuler très facilement du XML avec PHP. Pour
y parvenir je vais m’appuyer sur l’API SimpleXML introduite avec PHP 5. Pour des traitements
plus pointus, PHP 5 dispose d’une API DOM conforme aux standards niveau 2 de DOM. Je me
concentre sur SimpleXML.
1. Pré-requis
– Vous êtes familier de PHP et de sa syntaxe objet.
– Vous êtes familier de XML, notamment de XPath et XSLT.
– Vous disposez d’un serveur Apache 1.3 minimum.
– Vous disposez d’un serveur MySQL 4 minimum pour la partie SQL.
– Vous disposez de PHP 5 minimum.
C’est une banale table contenant les noms et prénoms d’individus. Remplissez-la avec les données
suivantes :
INSERT INTO ‘ i n d i v i d u ‘ ( ‘ i n d i v i d u \ _ i d ‘ , ‘ prenom ‘ , ‘nom ‘ ) VALUES
(1 , ’ H y a c i n t h e ’ , ’MENIET ’ ) ;
INSERT INTO ‘ i n d i v i d u ‘ ( ‘ i n d i v i d u \ _ i d ‘ , ‘ prenom ‘ , ‘nom ‘ ) VALUES
(2 , ’ W i l l i a m ’ , ’HEWLETT’ ) ;
INSERT INTO ‘ i n d i v i d u ‘ ( ‘ i n d i v i d u \ _ i d ‘ , ‘ prenom ‘ , ‘nom ‘ ) VALUES
(3 , ’ David ’ , ’PACKARD’ ) ;
INSERT INTO ‘ i n d i v i d u ‘ ( ‘ i n d i v i d u \ _ i d ‘ , ‘ prenom ‘ , ‘nom ‘ ) VALUES
(4 , ’ S c o t t ’ , ’MCNEALY’ ) ;
INSERT INTO ‘ i n d i v i d u ‘ ( ‘ i n d i v i d u \ _ i d ‘ , ‘ prenom ‘ , ‘nom ‘ ) VALUES
(5 , ’ Andy ’ , ’BECHTOLSHEIM ’ ) ;
1
3. Créer un objet SimpleXMLElement
Vous pouvez créer un objet SimpleXMLElement à partir d’une chaîne de caractère. Vous pou-
vez la soumettre directement ou la construire à partir de données contenues dans la base de don-
nées :
\ $ x m l s t r = ’ <? xml v e r s i o n = " 1 . 0 " e n c o d i n g =" i s o −8859 −1"? > ’." $ \
backslash$n "
. ’ < individus > ’." $ \ backslash$n ";
\ $db = mysql \ _ c o n n e c t ( ’ l o c a l h o s t ’ , ’ l o g i n ’ , ’mdp ’ ) ;
mysql \ _ s e l e c t \ _db ( ’ m y t e s t ’ , \ $db ) ;
\ $ i n d R e q = ’SELECT i n d i v i d u \ _ i d , prenom , nom FROM i n d i v i d u ’ ;
\ $ i n d R e s u l t = mysql \ _ q u e r y ( \ $ i n d R e q ) ;
w h i l e ( \ $ i n d = mysql \ _ f e t c h \ _ o b j e c t ( \ $ i n d R e s u l t ) ) \ {
\ $ x m l s t r . = ’ < i n d i v i d u i d = " ’ . \ $ i n d −> i n d i v i d u \ _ i d . ’ " > ’
. ’ < prenom > ’ . h t m l e n t i t i e s ( \ $ i n d −>prenom ) . ’ < / prenom > ’
. ’ < nom > ’ . h t m l e n t i t i e s ( \ $ i n d −>nom ) . ’ < / nom> </ i n d i v i d u > ’ . " $ \
backslash$n ";
\}
\ $ x m l s t r .= ’ </ i n d i v i d u s > ’ . " $ \ b a c k s l a s h $ n " ;
mysql \ _ c l o s e ( ) ;
\ $ i n d i v i d u s = simplexml \ _load \ _ s t r i n g ( \ $xmlstr ) ;
L’objet « individus » est de type SimpleXMLElement et contient votre fichier XML. Vous
pouvez le sauver dans un le fichier « copie.xml » grâce à la ligne suivante :
\ $ i n d i v i d u s −>asXML ( ’ c o p i e . xml ’ ) ;
Si vous disposez déjà d’un fichier XML et que vous souhaitez juste instancier un objet SimpleXMLElement
à partir de ce fichier, il suffit de faire :
i f ( ! f i l e \ _ e x i s t s ( ’ i n d i v i d u s . xml ’ ) ) \ {
e x i t ( ’ I m p o s s i b l e de l i r e i n d i v i d u s . xml . ’ ) ;
\}
\ $ i n d i v i d u s = s i m p l e x m l \ _ l o a d \ _ f i l e ( ’ i n d i v i d u s . xml ’ ) ;
4. Manipuler le XML
4.1 Afficher le fichier XML
A ce stade vous avez votre objet « individus » qui contient votre XML. Vous pouvez l’afficher
ainsi :
h e a d e r ( " C o n t e n t −t y p e : t e x t / xml " ) ;
e c h o \ $ i n d i v i d u s −>asXML ( ) ;
2
e c h o \ $ i n d i v i d u s −> i n d i v i d u [ 2 ] [ ’ i d ’ ] ;
Vous pouvez même créer de nouveaux champs et de nouveaux attributs. Cependant avec Sim-
pleXML je vous conseille de vous restreindre aux attributs. Pour les champs utilisez DOM. Ajou-
tez un attribut « ancien » au second individu se résume à :
\ $ i n d i v i d u s −> i n d i v i d u [ 2 ] [ ’ a n c i e n ’ ] = ’ W i l l i a m ’ ;
5. Utilisation avancée
5.1 Utiliser Xpath
Xpath est à XML ce que SQL est aux bases de données. Toute proportion gardée bien-sûr. C’est à
dire qu’il vous permet d’interroger un document XML et de n’extraire que certaines informations.
Pour avoir tous les prénoms :
\ $prenoms = \ $ i n d i v i d u s −>x p a t h ( ’ / i n d i v i d u s / i n d i v i d u / prenom ’ ) ;
f o r e a c h ( \ $prenoms a s \ $prenom ) \ {
e c h o \ $prenom . ’ < br > ’ ;
\}
Cette classe se contente de définir une méthode « listePrenoms » qui retourne la liste des prénoms.
En supposant que vous ayez sauvegardé votre fichier XML dans individus.xml, vous pouvez ins-
tancier un nouvel objet s’appuyant sur cette classe ainsi :
3
i n c l u d e ( ’ MyXMLElement . php ’ ) ;
i f ( ! f i l e \ _ e x i s t s ( ’ i n d i v i d u s . xml ’ ) ) \ {
e x i t ( ’ I m p o s s i b l e de l i r e i n d i v i d u s . xml . ’ ) ;
\}
\ $ s p e c i a l = s i m p l e x m l \ _ l o a d \ _ f i l e ( ’ i n d i v i d u s . xml ’ , ’ MyXMLElement ’ )
;
Ceux qui connaissent l’API DOM ont remarqué que j’utilise cette dernière et non SimpleXML.
En effet la ligne :
\ $ h t m l = \ $ x s l t −>t r a n s f o r m T o D o c ( \ $ i n d i v i d u s ) ;