Aller au contenu

xml_parse()

Qu'est-ce que xml_parse() ?

La fonction xml_parse() est une fonction intégrée de PHP qui permet d'analyser les données XML. Elle fait partie de l'extension XML Parser de PHP et implémente un analyseur de flux de style SAX (Simple API for XML). Contrairement aux analyseurs basés sur des arbres, il traite le XML de manière séquentielle, en déclenchant des fonctions de rappel (callbacks) dès qu'il rencontre des éléments, des attributs et des données de caractères. Cela le rend très efficace pour analyser de grands fichiers XML sans charger l'intégralité du document en mémoire.

La fonction xml_parse() est utile lorsque vous devez analyser des données XML en PHP, par exemple pour extraire des données d'un fichier XML, transformer des données XML dans un autre format, ou traiter des flux XML en temps réel.

Syntaxe

La syntaxe de la fonction xml_parse() est la suivante :


php
xml_parse($parser, $data, $is_final = false)

$parser est la ressource de l'analyseur XML retournée par la fonction d'initialisation de l'analyseur XML, telle que xml_parser_create(), $data sont les données XML à analyser, et $is_final est un paramètre optionnel qui indique si les données $data fournies constituent la dernière partie des données à analyser.

Exemples d'utilisation

Examinons quelques exemples pratiques d'utilisation de xml_parse() en PHP.

Exemple 1 : Analyse de données XML

Supposons que vous ayez un fichier XML "data.xml" que vous souhaitez analyser à l'aide de l'extension XML Parser de PHP. Vous pouvez utiliser la fonction xml_parse() pour analyser les données XML, comme suit :


php
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
$xml_data = file_get_contents("data.xml");
if (!xml_parse($xml_parser, $xml_data, true)) {
  $error_message = xml_error_string(xml_get_error_code($xml_parser));
  $error_line = xml_get_current_line_number($xml_parser);
  echo "XML Parsing Error: $error_message at line $error_line";
}
xml_parser_free($xml_parser);

Ce code crée un analyseur XML à l'aide de xml_parser_create() et définit une option pour désactiver la conversion en minuscules (case folding). Il lit ensuite le fichier XML "data.xml" et stocke son contenu dans la variable $xml_data. Il utilise xml_parse() pour analyser les données XML et vérifie si une erreur s'est produite lors du processus d'analyse à l'aide de la valeur de retour de xml_parse(). En cas d'erreur, il récupère le code d'erreur via xml_get_error_code() et le message d'erreur via xml_error_string(), puis affiche un message d'erreur sur la console incluant le message et le numéro de ligne de l'erreur. Enfin, il libère la mémoire utilisée par l'analyseur XML à l'aide de xml_parser_free().

Exemple 2 : Analyse de XML avec des gestionnaires d'événements

La fonction xml_parse() est conçue pour fonctionner avec des gestionnaires d'événements. En enregistrant des fonctions de rappel, vous pouvez traiter les éléments et les données XML au fur et à mesure de leur rencontre dans le flux.


php
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);

// Define handler functions
function startElement($parser, $name, $attrs) {
    echo "Start element: $name\n";
}
function endElement($parser, $name) {
    echo "End element: $name\n";
}
function characterData($parser, $data) {
    echo "Data: $data\n";
}

// Set handlers
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");

$xml_data = file_get_contents("data.xml");
if (!xml_parse($xml_parser, $xml_data, true)) {
    $error_message = xml_error_string(xml_get_error_code($xml_parser));
    $error_line = xml_get_current_line_number($xml_parser);
    echo "XML Parsing Error: $error_message at line $error_line";
}
xml_parser_free($xml_parser);

Ce code crée un analyseur XML à l'aide de xml_parser_create() et définit une option pour désactiver la conversion en minuscules. Il définit ensuite trois fonctions de rappel : startElement() pour les balises d'ouverture, endElement() pour les balises de fermeture, et characterData() pour le contenu textuel. Ces gestionnaires sont enregistrés à l'aide de xml_set_element_handler() et xml_set_character_data_handler().

Le script lit "data.xml" et le transmet à xml_parse(). Au fur et à mesure que l'analyseur parcourt le XML en flux, il appelle automatiquement les gestionnaires enregistrés. Si une erreur se produit lors de l'analyse, le code récupère le code et le message d'erreur à l'aide de xml_get_error_code() et xml_error_string(), puis affiche une erreur descriptive. Enfin, il libère la mémoire de l'analyseur avec xml_parser_free().

Conclusion

Dans cet article, nous avons présenté la fonction xml_parse() de PHP et son utilisation pour analyser des données XML. Nous avons expliqué qu'elle appartient à l'extension XML Parser (style SAX), couvert sa syntaxe et fourni des exemples d'analyse de base et d'implémentation de gestionnaires basés sur les événements. En suivant ces exemples, vous pouvez analyser efficacement des données XML, extraire des informations à partir de fichiers XML ou traiter de grands flux XML dans vos applications PHP.

Pratique

Qu'est-ce que l'analyseur XML en PHP ?

Trouvez-vous cela utile?

Aperçu dual-run — comparez avec les routes Symfony en production.