xml_parser_create()
La fonction xml_parser_create() est une fonction PHP intégrée qui crée un nouvel analyseur XML pour un traitement de style SAX piloté par événements.
La fonction xml_parser_create() est une fonction PHP intégrée qui crée un nouvel analyseur XML. Elle appartient à l'extension xml (Expat) héritée et est utilisée pour l'analyse de style SAX (pilotée par événements). Contrairement aux extensions de niveau supérieur telles que SimpleXML ou DOMDocument, cet analyseur traite les données XML de manière séquentielle en déclenchant des fonctions de rappel définies par l'utilisateur pour les éléments, les attributs et les données de caractères.
La fonction xml_parser_create() est utile lorsque vous devez analyser en flux de grands fichiers XML, extraire des données spécifiques sans charger l'intégralité du document en mémoire, ou traiter XML de manière bas niveau, pilotée par événements.
La fonction retourne un analyseur XML que vous stockez dans une variable et passez à toutes les autres fonctions xml_*. À partir de PHP 8.0, elle retourne un objet XMLParser ; dans les versions précédentes, elle retournait une resource. Dans tous les cas, vous le traitez comme un handle opaque — définissez des gestionnaires dessus, alimentez-le avec des données via xml_parse(), puis libérez-le avec xml_parser_free().
Syntaxe
La syntaxe de la fonction xml_parser_create() est la suivante :
syntaxe de la fonction xml_parser_create()
xml_parser_create([$encoding])Où $encoding est l'encodage de caractères utilisé par les données XML (par exemple "UTF-8", "ISO-8859-1" ou "US-ASCII"). Ce paramètre est optionnel ; lorsqu'il est omis, l'analyseur détecte l'encodage à partir de la déclaration XML du document.
Exemples d'utilisation
Voyons quelques exemples pratiques d'utilisation de xml_parser_create() en PHP.
Exemple 1 : Création d'un analyseur XML
Vous pouvez utiliser la fonction xml_parser_create() pour initialiser une ressource d'analyseur. Notez que la création de l'analyseur seul ne traite aucune donnée ; vous devez configurer des gestionnaires et appeler xml_parse() pour effectivement analyser le XML.
utiliser la fonction xml_parser_create() pour créer un nouvel analyseur XML en PHP
$xml_parser = xml_parser_create();Ce code crée une nouvelle ressource d'analyseur XML. En lui-même, il s'agit simplement d'un conteneur vide prêt à être configuré.
Exemple 2 : Analyse de données XML
Pour analyser réellement du XML, vous devez configurer des gestionnaires d'événements et alimenter les données dans l'analyseur en utilisant xml_parse().
utiliser la fonction xml_parser_create() pour analyser des données XML en PHP
$xml_parser = xml_parser_create();
$xml_data = file_get_contents("data.xml");
// Set up element handlers
xml_set_element_handler($xml_parser, function($parser, $name) {
echo "Start element: $name\n";
}, function($parser, $name) {
echo "End element: $name\n";
});
// Parse the data
if (!xml_parse($xml_parser, $xml_data, true)) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
xml_parser_free($xml_parser);Ce code crée un analyseur, enregistre des rappels pour les balises d'ouverture et de fermeture, et utilise xml_parse() pour traiter le fichier XML. L'analyseur déclenche les rappels au fur et à mesure qu'il lit les données séquentiellement.
Exemple 3 : Extraction de données depuis du XML en ligne
Cet exemple autonome analyse une chaîne XML et collecte le texte de chaque élément dans un tableau à l'aide d'un gestionnaire de données de caractères. Il fonctionne tel quel, sans aucun fichier externe.
extraire des données depuis XML en utilisant l'extension xml en PHP
$xml_data = <<<XML
<?xml version="1.0"?>
<book>
<title>Learn PHP</title>
<author>W3docs</author>
</book>
XML;
$xml_parser = xml_parser_create();
$current_tag = '';
$book = [];
xml_set_element_handler(
$xml_parser,
function ($parser, $name) use (&$current_tag) {
$current_tag = $name; // element names arrive UPPERCASE by default
},
function ($parser, $name) use (&$current_tag) {
$current_tag = '';
}
);
xml_set_character_data_handler(
$xml_parser,
function ($parser, $data) use (&$current_tag, &$book) {
$data = trim($data);
if ($current_tag !== '' && $data !== '') {
$book[$current_tag] = $data;
}
}
);
xml_parse($xml_parser, $xml_data, true);
xml_parser_free($xml_parser);
print_r($book);Sortie :
Array
(
[TITLE] => Learn PHP
[AUTHOR] => W3docs
)Remarquez que les clés sont en majuscules. Par défaut, l'analyseur Expat convertit les noms d'éléments en majuscules, ce qui explique pourquoi le gestionnaire stocke TITLE et AUTHOR plutôt que title et author. Pour conserver la casse d'origine, désactivez le repli de casse juste après la création de l'analyseur :
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false);Le gestionnaire de données de caractères peut également se déclencher plusieurs fois par élément (par exemple lorsque le texte est divisé par des entités ou des sauts de ligne), donc cet exemple concatène avec une logique de style .= — ici une seule affectation suffit car chaque valeur est une courte chaîne unique.
xml_parser_create() est conçu pour l'analyse pilotée par événements et n'effectue pas de validation de schéma. Pour la validation XSD, les extensions de niveau supérieur DOMDocument ou SimpleXML sont recommandées.
Conclusion
Dans cet article, nous avons abordé la fonction xml_parser_create() de PHP et comment elle peut être utilisée pour créer un nouvel analyseur XML de style SAX. Nous avons expliqué ce que fait la fonction, sa syntaxe, et fourni des exemples de configuration des gestionnaires et d'analyse séquentielle des données XML. En suivant ces exemples, vous pouvez analyser efficacement en flux des fichiers XML et extraire des données spécifiques dans vos applications PHP. Pour la plupart des cas d'utilisation modernes, envisagez d'utiliser SimpleXML ou DOMDocument, qui fournissent des API de niveau supérieur et une validation intégrée sans nécessiter de configuration manuelle de l'analyseur.
Fonctions associées
xml_parser_create_ns()— crée un analyseur XML prenant en charge les espaces de noms.xml_parse()— alimente les données XML dans l'analyseur et déclenche les gestionnaires.xml_set_element_handler()— enregistre des rappels pour les balises d'ouverture et de fermeture.xml_set_character_data_handler()— enregistre un rappel pour le contenu textuel.xml_parser_set_option()— modifie les options de l'analyseur telles que le repli de casse.xml_parser_free()— libère l'analyseur lorsque vous avez terminé.xml_error_string()— obtient un message lisible par l'humain pour une erreur d'analyse.