Analyseur Expat XML PHP

Cours recommandés :

L'analyseur Expat intégré permet de traiter les documents XML en PHP.

Qu'est-ce que XML ?

Dans XML, il n'y a pas de balises prédéfinies. Vous devez définir vos propres balises.

Si vous souhaitez en savoir plus sur XML, visitez notre Tutoriel XML.

Qu'est-ce que Expat ?

Pour lire et mettre à jour - créer, traiter - un document XML, vous avez besoin d'un analyseur XML.

Il y a deux types de bases d'analyseur XML :

  • Analyseur basé sur l'arbreIl convertit le document XML en structure arborescente. Il analyse tout le document et fournit une API pour accéder aux éléments de l'arbre, tels que le Document Object Model (DOM).
  • Analyseur basé sur des événementsIl considère le document XML comme une série d'événements. Lorsqu'un événement spécifique se produit, l'analyseur appelle des fonctions pour le traiter.

Analyseur basé sur des événements

L'analyseur basé sur des événements se concentre sur le contenu du document XML, plutôt que sur leurs résultats. C'est pourquoi l'analyseur basé sur des événements peut accéder aux données plus rapidement que l'analyseur basé sur l'arbre.

Voyez l'extrait XML suivant :

<from>John</from>

L'analyseur basé sur des événements rapporte l'XML ci-dessus en une série de trois événements :

  • Début de l'élément : from
  • Début de la section CDATA, valeur : John
  • Fermeture de l'élément : from

L'exemple XML ci-dessus contient un XML bien formé. Cependant, cet exemple est un XML non valide, car il n'a pas de déclaration de type de document (DTD) associée et n'a pas de DTD intégré.

Cependant, il n'y a pas de différence dans l'utilisation de l'analyseur Expat. Expat n'est pas un analyseur de validité et ignore toute DTD.

En tant qu'analyseur XML basé sur des événements et non vérifié, Expat est rapide et léger, ce qui le rend particulièrement adapté aux applications web PHP.

Remarque :Un document XML doit être bien formé, sinon Expat génère des erreurs.

Installation

L'analyseur XML Expat fait partie intégrante du noyau PHP. Vous pouvez utiliser ces fonctions sans l'installer.

Fichier XML

Nous utiliserons le fichier XML suivant dans notre exemple :

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Rappel</heading>
<body>N'oubliez pas la réunion !</body>
</note>

Initialiser l'analyseur XML

Nous devons initialiser l'analyseur XML en PHP, définir des gestionnaires pour différents événements XML, puis analyser ce fichier XML.

Exemple

<?php
//Initialisation de l'analyseur XML
$parser=xml_parser_create();
//Fonction à utiliser au début d'un élément
function start($parser,$element_name,$element_attrs)
  {
  switch($element_name)
    {
    case "NOTE":
    echo "-- Note --<br />";
    break; 
    case "TO":
    echo "À: ";
    break; 
    case "FROM":
    echo "De: ";
    break; 
    case "HEADING":
    echo "Titre: ";
    break; 
    case "BODY":
    echo "Message: ";
    }
  }
//Fonction à utiliser à la fin d'un élément
function stop($parser,$element_name)
  {
  echo "<br />";
  }
//Fonction à utiliser lors de la recherche de données de caractères
function char($parser,$data)
  {
  echo $data;
  }
//Spécification du gestionnaire d'élément
xml_set_element_handler($parser,"start","stop");
//Spécification du gestionnaire de données
xml_set_character_data_handler($parser,"char");
//Ouverture du fichier XML
$fp=fopen("test.xml","r");
//Lecture des données
while ($data=fread($fp,4096))
  {
  xml_parse($parser,$data,feof($fp)) ou 
  die (sprintf("Erreur XML: %s à la ligne %d", 
  xml_error_string(xml_get_error_code($parser)),
  xml_get_current_line_number($parser)));
  }
//Libérer l'analyseur XML
xml_parser_free($parser);
?>

Sortie du code ci-dessus :

-- Note --
À: George
De: John
Titre: Rappel
Message: Ne pas oublier la réunion !

Explication du principe de fonctionnement :

  • Initialiser l'analyseur XML à l'aide de la fonction xml_parser_create()
  • Créer des fonctions pour différentes procédures de traitement d'événements
  • Ajoutez la fonction xml_set_element_handler() pour définir, quel fonction exécuter lorsque l'analyseur rencontre des balises de début et de fin
  • Ajoutez la fonction xml_set_character_data_handler() pour définir, quel fonction exécuter lorsque l'analyseur rencontre des données de caractères
  • Analyser le fichier "test.xml" à l'aide de la fonction xml_parse()
  • Au cas où il y aurait une erreur, ajoutez la fonction xml_error_string() pour convertir les erreurs XML en texte descriptif
  • Appeler la fonction xml_parser_free() pour libérer la mémoire allouée par la fonction xml_parser_create()

Plus d'informations sur l'analyseur PHP Expat

Pour plus d'informations sur les fonctions PHP Expat, veuillez consulter notre manuel de référence PHP XML Parser.