Aller au contenu

xml_parser_create_ns()

La fonction xml_parser_create_ns() est une fonction intégrée de PHP qui crée un nouvel analyseur XML avec prise en charge des espaces de noms. Elle appartient à l'extension XML Parser et est utilisée lors de l'analyse de documents XML. Contrairement à SimpleXML, cette fonction fonctionne avec une API de type « pull » pilotée par des événements, ce qui vous permet de traiter efficacement les flux XML. Lorsque la prise en charge des espaces de noms est activée, l'analyseur résout automatiquement les préfixes d'espaces de noms et transmet des noms d'éléments structurés à vos gestionnaires, éliminant ainsi le besoin de résolution manuelle des préfixes.

Syntaxe

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

Syntaxe de la fonction xml_parser_create_ns() en PHP

php
xml_parser_create_ns(?string $encoding = null, string $namespace_separator = '?')

$encoding est l'encodage de caractères utilisé par les données XML (par exemple, 'UTF-8'), et $namespace_separator est le caractère utilisé pour joindre les URI d'espaces de noms aux noms locaux dans les rappels des gestionnaires (la valeur par défaut est ?). Les deux paramètres sont facultatifs.

Exemples d'utilisation

Examinons des exemples pratiques d'utilisation de xml_parser_create_ns() en PHP.

Exemple 1 : Création d'un analyseur XML

Pour créer un analyseur, appelez xml_parser_create_ns(). Cela retourne une ressource d'analyseur qui doit être configurée avec des gestionnaires d'éléments et de caractères avant l'analyse.

créer un nouvel analyseur XML avec prise en charge des espaces de noms

php
$parser = xml_parser_create_ns();
// Configure handlers and parse data...

Ce code crée un nouvel analyseur avec le traitement des espaces de noms activé. La ressource d'analyseur est ensuite utilisée avec xml_set_element_handler() et xml_parse() pour traiter les données XML.

Exemple 2 : Analyse de données XML avec des préfixes d'espaces de noms

Lorsque la prise en charge des espaces de noms est activée, l'extension XML Parser résout automatiquement les préfixes d'espaces de noms. Les noms d'éléments transmis aux gestionnaires sont formatés sous la forme namespace_uri?local_name (en utilisant le séparateur par défaut). La résolution des espaces de noms est gérée par l'analyseur lui-même, et non manuellement.

analyser des données XML à l'aide de l'extension XML Parser

php
$parser = xml_parser_create_ns();
$xml_data = '<?xml version="1.0"?><root xmlns:ns="http://example.com"><ns:child>value</ns:child></root>';

xml_set_element_handler($parser, function($parser, $name) {
    echo "Element: $name\n";
}, function($parser, $name) {
    echo "End Element: $name\n";
});

xml_parse($parser, $xml_data);
xml_parser_free($parser);

Ce code crée un analyseur, définit des gestionnaires pour capturer les noms d'éléments et analyse la chaîne XML. Le nom d'élément ns:child est automatiquement résolu et transmis au gestionnaire sous la forme http://example.com?child.

Exemple 3 : Personnalisation de l'encodage de caractères et du séparateur

Par défaut, xml_parser_create_ns() suppose que les données XML utilisent l'encodage par défaut du système. Vous pouvez spécifier un encodage et un séparateur d'espace de noms personnalisé pour garantir un traitement correct des caractères et un formatage approprié des rappels.

personnaliser l'encodage et le séparateur pour un traitement correct des caractères

php
$parser = xml_parser_create_ns('UTF-8', '|');
$xml_data = '<?xml version="1.0"?><root xmlns:ns="http://example.com"><ns:child>value</ns:child></root>';

xml_set_element_handler($parser, function($parser, $name) {
    echo "Element: $name\n";
}, null);

xml_parse($parser, $xml_data);
xml_parser_free($parser);

Ce code crée un analyseur avec un encodage UTF-8 et un séparateur personnalisé |. La ressource d'analyseur est libérée après utilisation pour éviter les fuites de mémoire.

Pratique

Quelle sortie le code PHP fourni à l'URL liée produira-t-il ?

Trouvez-vous cela utile?

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