PHP Analyseur XML Expat


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


Qu'est-ce que XML ?

XML est utilisé pour décrire des données, et son objectif est de définir ce que sont les données. Un fichier XML décrit la structure des données.

En XML, il n'existe pas de balises prédéfinies. Vous devez définir vos propres balises.

Pour en savoir plus sur XML, veuillez visiter notreTutoriel XML。


Qu'est-ce qu'Expat ?

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

Il existe deux types de base de parseurs XML :

  • Analyseurs arborescents : Ce type d'analyseur convertit un document XML en une structure arborescente. Il analyse l'intégralité du document et donne accès aux éléments de l'arbre, tels que le Document Object Model (DOM).
  • Analyseurs basés sur les événements : ils traitent un document XML comme une série d'événements. Lorsqu'un événement spécifique se produit, l'analyseur appelle une fonction pour le traiter.

L'analyseur Expat est un analyseur basé sur les événements.

Les analyseurs basés sur les événements se concentrent sur le contenu du document XML, et non sur sa structure. Pour cette raison, les analyseurs basés sur les événements peuvent accéder aux données plus rapidement que les analyseurs basés sur l'arborescence.

Regardez le fragment XML suivant :

<from>Jani</from>

L'analyseur basé sur les événements signale le XML ci-dessus comme une série de trois événements :

  • Élément de début : from
  • Début de la section CDATA, valeur : Jani
  • Élément de fin : from

L'exemple XML ci-dessus contient du XML bien formé. Cependant, cet exemple est un XML invalide car aucune déclaration de type de document (DTD) ne lui est associée.

Cependant, lors de l'utilisation de l'analyseur Expat, cela ne fait aucune différence. Expat est un analyseur non validant qui ignore toute DTD.

En tant qu'analyseur XML basé sur les événements et non validant, Expat est rapide et léger, ce qui le rend très adapté aux applications web PHP.

Remarque :Les documents XML doivent être bien formés, sinon Expat générera une erreur.


Installation

Les fonctions de l'analyseur XML Expat font partie du cœur de PHP. Vous pouvez utiliser ces fonctions sans installation.


Fichier XML

Le fichier XML suivant sera utilisé dans notre exemple :

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Rappel</heading>
<body>Ne m'oubliez pas ce week-end !</body>
</note>


Initialiser l'analyseur XML

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

Exemple

<?php
//Initialiser 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écifier le gestionnaire d'éléments
xml_set_element_handler($parser,"start","stop");

//Spécifier le gestionnaire de données
xml_set_character_data_handler($parser,"char");

//Ouvrir le fichier XML
$fp=fopen("test.xml","r");

//Lire les données
while ($data=fread($fp,4096))
{
xml_parse($parser,$data,feof($fp)) or
die (sprintf("XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}

//Libérer l'analyseur XML
xml_parser_free($parser);
?>

Le code ci-dessus affichera :

-- Note --
À : Tove
De : Jani
Titre : Rappel
Message : Ne m'oublie pas ce week-end !

Fonctionnement :

  1. Initialiser l'analyseur XML avec la fonction xml_parser_create()
  2. Créer des fonctions pour travailler avec différents gestionnaires d'événements
  3. Ajouter la fonction xml_set_element_handler() pour définir quelle fonction exécuter lorsque l'analyseur rencontre des balises de début et de fin
  4. Ajouter la fonction xml_set_character_data_handler() pour définir quelle fonction exécuter lorsque l'analyseur rencontre des données de caractères
  5. Analyser le fichier "test.xml" avec la fonction xml_parse()
  6. En cas d'erreur, ajouter la fonction xml_error_string() pour convertir une erreur XML en description textuelle
  7. Appelez 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 notreManuel de référence du parseur XML PHP。

Autres extensions