W3docs

xml_parser_create_ns()

La fonction xml_parser_create_ns() crée un analyseur XML avec prise en charge des espaces de noms en PHP. Découvrez sa syntaxe et des exemples.

La fonction xml_parser_create_ns() est une fonction intégrée à PHP qui crée un nouvel analyseur XML avec prise en charge des espaces de noms. Elle fait partie de l'extension XML Parser et est utilisée lors de l'analyse de documents XML. Contrairement à SimpleXML, cette fonction fonctionne avec une API pull pilotée par événements, ce qui permet de traiter efficacement des 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 la nécessité d'une 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

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

$encoding est l'encodage des 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 de gestionnaires (par défaut ?). 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 renvoie 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

$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 comme 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, pas manuellement.

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

$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 des 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'espaces de noms personnalisé pour garantir une gestion correcte des caractères et un formatage des rappels approprié.

personnaliser l'encodage et le séparateur pour une gestion correcte des caractères

$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 l'encodage UTF-8 et un séparateur | personnalisé. La ressource d'analyseur est libérée après utilisation pour éviter les fuites mémoire.

Exercice

Pratique
Quelle sortie le code PHP fourni à l'URL liée produira-t-il ?
Quelle sortie le code PHP fourni à l'URL liée produira-t-il ?
Was this page helpful?