Qu'est que l’expert analyseur ou le parser XML En PHP

Pour lire et mettre à jour ou créer et manipuler  un document XML, vous aurez besoin d'un analyseur XML.
Il existe deux principaux types d'analyseurs XML :


PHP et XML

Types d'analyseurs XML

Il existe deux principaux types d'analyseurs XML :
  1. Analyseur basé sur l'arborescence : cet analyseur transforme un document XML dans une structure arborescente. Il analyse l'ensemble du document et donne accès à des éléments de l'arborescence. par exemple le modèle DOM
  2. Analyseur basé sur des événements : cet analyseur considère un document XML comme une série d'événements. Lorsqu'un événement spécifique se produit, il appelle une fonction pour le gérer

PHP XML Parser Expert

L'analyseur Expert est un analyseur basé sur des événements.

Parseurs événementiels se concentrent sur le contenu des documents XML, pas leur structure. Pour cette raison, les parseurs événementiels peuvent accéder aux données plus rapidement que les analyseurs arborescente.

Regardez la fraction XML suivante :

<de>Carabde</de>

Un analyseur basé sur des événements rapporte le code XML ci-dessus comme une série de trois événements :

  • Élément de début : de
  • Début de section CDATA, valeur : Carabde
  • Élément de fin : de

L'exemple XML ci-dessus contient du code XML bien formé. Toutefois, l'exemple n'est pas un code XML valide, parce qu'il n'y a aucune définition de Type de Document (DTD) qui lui est associé.

Mais, ça ne fait aucune différence lorsque vous utilisez l'analyseur Expert. Expert est un analyseur non validant et ignore toute DTD.

Comme Expert est un analyseur XML basé sur les événements, non validant, il est rapide et léger, et correspond  parfaitement pour les applications web PHP.

Remarque : Les documents XML doivent être bien formés ou Expert générera une erreur.


Installation

Les fonctions du parseur XML Expert font partie de la base PHP. Aucune installation n’est nécessaire pour utiliser ces fonctions.


Un fichier XML

Le fichier XML ci-dessous sera utilisé dans notre exemple :

   Sélectionner le code

 <?xml version="1.0" encoding="ISO-8859-1"?>     
 <note>     
 <pour>Gerywa</pour>     
 <de>Carabde</de>     
 <titre>Rappel</titre>     
 <corps>N'oubliez pas notre rendez-vous ce week-end! </corps>     
 </note>     

 

L'initialisation de l'analyseur XML

Nous voulons initialiser l'analyseur XML en PHP, définissez certains gestionnaires pour différents événements XML et puis analysez le fichier XML.

Nous suivrons les étapes suivantes :

A - Initialiser l'analyseur XML en utilisant la méthode : xml_parser_create()  et nous stockons le resultat dans la variable $analyse.

Ce qui donne la ligne de code suivate :

 $analyse=xml_parser_create();

 

B - Nous créons trois fonctions :

1-    Une fonction à utiliser au début d'un élément je nomme debbut(), elle prend comme paramètres : notre variable $analyse le nom et l’attribut de l’élément. Ce qui donne le code suivant :

  Sélectionner le code
	  
function debut($analyse,$nom_element,$element_attributs)       
{       
  switch($nom_element)       
{       
case "NOTE":       
echo "-- Note --<br>";       
break;       
case "POUR":       
echo "Pour: ";       
break;       
case "DE":       
echo "De: ";       
break;       
case "TITRE":       
echo "Titre: ";       
break;       
case "CORPS":       
echo "Message: ";       
}       
  }       

 
 

2-    Une fonction à utiliser à la fin d'un élément  que je nomme stop(), elle prend comme paramètres la variable $analyse et le nom de l’élément  ce qui donne le code suivant :

Sélectionner le code
        
function stop($analyse,$nom_element)       
  {       
  echo "<br>";       
  }       

 
 

3-    Et une fonction à utiliser lors de la recherche des données de type caractère ce qui donne le code suivant :

  Sélectionner le code
 
function character($analyse,$data)       
  {       
  echo $data;       
  }       

 

C - En fin nous utiliserons des fonctions intégrées en PHP à savoir :

- Les fonction de manipulation de fichiers : fopen(), fread() et filesize() pour savoir plus sur ces fonctions voir notre tutorial sur la manipulation de fichiers en php  .

- Les fonctions parser PHP XML : xml_set_element_handler(), xml_set_character_data_handler(), xml_parse() et xml_get_current_line_number(). Ces fonctions nous allons les étudier en détail dans les chapitre à venir dans ce tutorial.

Ce qui donne le code suivant :

Sélectionner le code
        
xml_set_element_handler($analyse,"debut","stop");       
xml_set_character_data_handler($analyse,"character");       
$file=fopen("test.xml","r");       
while ($data=fread($file, filesize("test.xml")))       
  {       
  xml_parse($analyse,$data,feof($file)) or die (sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code($analyse)), xml_get_current_line_number($analyse)));       
  }       
xml_parser_free($analyse);       

 
 

Si vous rassemblez tous ces bouts de code et que vous exécutez le code résultant vous aurez le résultat comme suit :

 

-- Note --
Pour: Gerywa
De: Carabde
Titre: Rappel
Message: N'oubliez pas notre rendez-vous ce week-end! 

 

En résumé comment ça marche :

Initialiser l'analyseur XML avec la fonction xml_parser_create()

Créer des fonctions à utiliser avec les différents gestionnaires d'événements  

Ajoutez la fonction xml_set_element_handler() pour spécifier la fonction qui sera exécutée lorsque l'analyseur rencontre les balises d'ouverture et les balises de fermeture

Ajoutez la fonction xml_set_character_data_handler() pour spécifier la fonction qui s'exécute lorsque l'analyseur rencontre des données de type caractère

Analyser le fichier « test.xml » avec la fonction xml_parse()

En cas d'erreur, ajoutez xml_error_string() fonction pour convertir une erreur XML en une description textuelle

Appelez la fonction xml_parser_free() pour libérer la mémoire allouée avec la fonction xml_parser_create().

TELECHRGER LE CODE SOURCE COMPLET DES EXEMPLES DE CE TUTORIAL

Par carabde 30 mars 2015