PHP simpleXML


PHP et XML

PHP SimpleXML gère les tâches les plus courantes de XML et laisse le reste pour les autres extensions comme xml_parser par exemple.


Ce qui est PHP SimpleXML ?

SimpleXML est nouveau introduit en PHP 5.

L’extension SimpleXML fournit un moyen simple d'obtenir le nom et le texte de l'élément XML.

Par rapport aux DOM ou l'analyseur Expert, SimpleXML ne nécessite que quelques lignes de code pour lire les données textuelles d'un élément XML.

SimpleXML convertit le document XML (ou la chaîne XML) dans un objet, comme ceci :

  • Les éléments sont convertis en attributs uniques de l'objet SimpleXMLElement. Quand il y a plus d’un élément dans un seul niveau, ils sont placés à  dans un tableau.
  • Les attributs sont accessibles à l'aide de tableaux associatifs, où un index correspond au nom de l'attribut
  • Le texte à l'intérieur des éléments est converti en chaîne. Si un élément n'a plus d'un nœud de texte, ils seront situeront dans l'ordre qu'ils sont trouvent

SimpleXML est rapide et facile à utiliser lors de l'exécution de tâches telles que :

  • La lecture et/ou l’extraction des données de fichiers et/ou chaînes XML
  • Édition de nœuds de texte ou d'attributs

Toutefois, lorsqu'il s'agit de XML avancée, c’est mieux d'utiliser l'analyseur Expert ou le XML DOM.


Installation

Depuis PHP5, les fonctions SimpleXML font partie de la base PHP. Aucune installation n'est nécessaire pour utiliser ces fonctions.


Exemples de SimpleXML PHP

Supposons que nous avons le fichier XML, "test.xml" du chapitre précédent:

Sélectionner le code
	  
<?xmlversion="1.0" encoding="UTF-8"?>
<note>
<pour>Sara</pour>
<de>Yasmine</de>
<titre>Invitation</titre>
<corps>Venez me voir chez moi ce week-end!
</corps>
</note>

 

Maintenant nous voulons sortir différentes informations du fichier XML ci-dessus :

Exemple 1 : Les clés de sortie et les éléments de l’objet SimpleXMLElement :

Sélectionner le code
       
<!DOCTYPE html>
<html>
<body>
 
<?php
$xmlDoc=simplexml_load_file("test.xml");
print_r($xmlDoc);
?> 
 
</body>
</html>

 

Le résultat du code ci-dessus sera :

SimpleXMLElement Object ( [pour] => Sara [de] => Yasmine [titre] => Invitation [corps] => Venez me voir chez moi ce week-end! )

 

Exemple 2 : Copiez les données de chaque élément du fichier XML :

Sélectionner le code
	  
<!DOCTYPE html>
<html>
<body>
 
<?php
$xml=simplexml_load_file("test.xml");
 
echo$xml->pour . "<br>";
echo$xml->de . "<br>";
echo$xml->titre . "<br>";
echo$xml->corps;
?> 
 
</body>
</html>

 

Le résultat du code ci-dessus sera :

Sara
Yasmine
Invitation
Venez me voir chez moi ce week-end!

Voilà nous avons récupéré le te texte des éléments XML du fichier « test.xml ».

Dans l’exemple nous avons simplement affiché ces textes récupérés, mais vous pouvez les stocker dans des variables et en faire ce que bon vous semble.

 

Exemple 3 : Récupération  de données pour chaque nœud enfant avec le nom de l'élément :

Sélectionner le code
	  
<!DOCTYPE html>
<html>
<body>
 
<?php
$xml=simplexml_load_file("test.xml");
echo$xml->getName() . "<br>";
 
foreach($xml->children() as
$child)
   {
   echo $child->getName() . " : " . $child .
"<br>";
   }
?> 
 
</body>
</html>

 

Le résultat du code ci-dessus sera :

note
pour : Sara
de : Yasmine
titre : Invitation
corps : Venez me voir chez moi ce week-end! 

Dans l’exemple nous avons récupéré le nom de chaque élément XML par la méthode getName() en utilisant la boucle foreach .


PHP simpleXML en pratique

Les flux RSS sont des flux de contenus en XML que les gens peuvent utiliser pour partager des éléments d'information sur des sites Web. Les fonctions SimpleXML de PHP 5 simplifient considérablement le processus d'interprétation de la RSS et la transforment en quelque chose d'utile pour vos pages web.

Dans ce qui suit je vais plus au moins reprendre tout ce que nous venons de voir depuis le début, pour clarifier l’utilisation du simpleXML  encor plus et ajouter d’autres choses utiles.

Pour ce faire j’ai créer un fichier XML qui représente une liste de chansons avec le titre de la chanson le nom du chanteur ou artiste et en attribut la date où la chanson est apparue.

Voici le fichier XML :

Sélectionner le code
       
<?xmlversion="1.0" encoding="UTF-8"?>
<chansons>
<chanson dateparution="1959"><chanteur>Jacques Brel
</chanteur><titre>Ne me quitte
pas</titre></chanson>
<chanson dateparution="1946"> <chanteur>Charles
Trenet </chanteur><titre>La
mer</titre></chanson>
<chanson  dateparution="1970">
<chanteur>Barbara</chanteur><titre>L’aigle
noir</titre></chanson>
<chanson  dateparution="1949"> <chanteur>Edith
Piaf</chanteur> <titre>Hymne à
l’amour</titre></chanson>
<chanson  dateparution="1970"> <chanteur>Léo
Ferré</chanteur><titre>Avec le
temps</titre></chanson>
<chanson  dateparution="1946"> <chanteur>Yves
Montand</chanteur> <titre>Les feuilles
mortes</titre></chanson>
<chanson  dateparution="1964"> <chanteur>Georges
Brassens</chanteur><titre>Les copains
d’abord</titre></chanson>
<chanson  dateparution="1966"> <chanteur>Charles
Aznavour</chanteur><titre>La
bohème</titre></chanson>
<chanson  dateparution="1954"> <chanteur>Georges
Brassens</chanteur><titre>Chanson pour
l’Auvergnat</titre></chanson>
<chanson  dateparution="1981"> <chanteur>Céline
Dion</chanteur><titre>La Voix du Bon
Dieu</titre></chanson>
<chanson  dateparution="1985"> <chanteur>Yves
Duteil</chanteur><titre>La langue de chez
nous</titre></chanson>
<chanson  dateparution="1956"> <chanteur>Jacques
Brel</chanteur><titre>Quand on n’a que
l’amour</titre></chanson>
<chanson  dateparution="1962"> <chanteur>Henri
Salvador</chanteur><titre>Syracuse</titre></chanson>
<chanson  dateparution="1962"> <chanteur>Jacques
Brel</chanteur><titre>Le plat
pays</titre></chanson>
<chanson  dateparution="1964"> <chanteur>Jacques
Brel</chanteur><titre>Amsterdam</titre></chanson>
</chansons>
 
 

Il ya quelques règles que vous devez respecter lors de la création des données XML. Si vous êtes familier avec XHTML  vous serez à l'aise avec eux, mais nous allons les examiner:

  • XML est sensible à la casse si <Title> ` est pas le même que <title> .
  • Tous les éléments XML doivent avoir des balises de fermeture.
  • XML nécessite un élément racine (le <songs> tag ci-dessus sert de notre élément racine)
  • Les attributs doivent être cités donc mis entre apostrophes doubles ou simples
  • Les caractères spéciaux (tels que &  et < et > ) doivent être encodés.

XML est un peu plus strict que le HTML, mais il est très facile à créer et à gérer.

Avec simpleXML, c'est aussi facile que la lecture du XML, puis accéder à son contenu à travers un objet facile à lire.

En supposant que nous avons notre fichier XML ci-dessus sauvegardé comme un fichier appelé mes-chansons.xml dans le même dossier que notre fichier php, et comme nous avons vu au début de cet article, on peut lire la totalité du fichier XML en le chargeant dans un objet simpleXML  avec le code suivant.

    $mesChanson  =  simplexml_load_file ( 'mes-chansons.xml' );

C'est tout!

Le  fichier XML peut être même l'URL d'un flux sur le web, et pas seulement un fichier sur votre disque dur.

Nous avons maintenant un objet qui représente notre fichier.

L'objet des chansons a été stocké dans la variable $mesChanson.

Si nous voulons récupérer et afficher le nom du première chanteur dans notre liste, nous pouvons faire comme ceci:

Sélectionner le code
       
$mesChanson  =  simplexml_load_file ( 'mes-chansons.xml' );
    echo  $mesChanson -> chanson[ 0 ] -> chanteur ;

 

Notez que nos balises XML sont mappés en tant que partie de l'objet afin que nous puissions arriver à n'importe quel élément en tapant simplement son nom.

Rappelez-vous aussi que les tableaux sont indexés à partir de 0 en PHP et donc notre premier titre serait notre titre 0 émé.

Maintenant, nous allons récupérer et afficher le troisième titre de la liste des chansons.

Sélectionner le code
      
$mesChanson  =  simplexml_load_file ( 'mes-chansons.xml' );
echo  $mesChanson -> chanson[ 2 ] -> titre;

 

UTILISATION D'ATTRIBUTS

Afin d'obtenir les dates, nous devons savoir comment accéder aux attributs, la notation est légèrement différente de celle des balises, mais tout aussi facile. En fait, il fonctionne exactement comme l'accès à un élément de tableau avec des crochets et des apostrophes. Voici comment récupérer la date de la deuxième chanson.

Sélectionner le code
      
 $mesChanson  =  simplexml_load_file ( 'mes-chansons.xml' );
 echo $mesChanson->chanson[1]['dateparution'];
 
 

AFFICHER LA LISTE DES CHANSONS

Alors, maintenant que nous avons les bases d'éléments d’accès, nous allons pouvoir écrire le code pour faire une liste complète de nos chansons analysé en interprétant notre fichier XML.

Sélectionner le code
      
$mesChanson  =  simplexml_load_file ( 'mes-chansons.xml' );
   echo "<ul>";
    foreach ($mesChanson as $chantinfo):
       $titre=$chantinfo->titre;
        $chanteur=$chantinfo->chanteur;
       $date=$chantinfo['dateparution'];
        echo "<li><span>",$titre,"</span>
<span> par ",$chanteur,"</span>
<time>",$date,"</time></li>";
   endforeach;
    echo "</ul>";
 
 

Nous utilisons ici une boucle foreach pour passer en revue chaque chanson et puis l'analyse de l'information que nous affichons dans une liste HTML simple.

Vous pouvez l'utiliser dans un document HTML standard ou l'utiliser comme un widget pour afficher une liste de chansons.

TELECHRGER LE CODE SOURCE COMPLET DES EXEMPLES DE CE TUTORIAL

Par carabde 30 mars 2015