Lors de l'analyse des documents XML, l'extension d'expatriés de PHP fournit aux développeurs une série de fonctions de gestion d'événements puissantes qui peuvent répondre au début et à la fin de diverses structures dans un document. Parmi eux, la fonction XML_SET_END_NAMESPACE_DECL_HANDLER est spécifiquement conçue pour déclencher des rappels à la fin d'une déclaration d'espace de noms, et est très adapté à la collecte de métadonnées liées à un espace de noms.
xml_set_end_namespace_decl_handler est une fonction fournie par PHP pour définir le processeur de fin de la déclaration de l'espace de noms, et sa définition est la suivante:
bool xml_set_end_namespace_decl_handler(XMLParser $parser, callable $handler)
$ Parser est une ressource Parser XML créée par XML_PARSER_CREATE () .
$ Handler est une fonction de rappel qui sera appelée à la fin de la déclaration d'espace de noms, le formulaire de fonction est le suivant:
function handler(XMLParser $parser, string $prefix): void
Ce rappel sera passé dans un préfixe d'espace de noms pour un traitement ultérieur par le développeur.
Combiné avec XML_SET_END_NAMESPACE_DECL_HANDLER , nous pouvons effectuer des opérations telles que le nettoyage, le comptage ou l'enregistrement de méta-information à la fin de la portée de l'espace de noms, en particulier pour les systèmes qui doivent organiser des données par espace de noms.
Voici un exemple de code qui montre comment obtenir des métadonnées supplémentaires à la fin d'un espace de noms XML et l'imprimer sur la console:
<?php
// créer XML Analyseur
$parser = xml_parser_create();
// Arrivés qui stockent les métadonnées
$namespaceMetadata = [];
// Définir le processeur de fin d'espace de noms
xml_set_end_namespace_decl_handler($parser, function($parser, $prefix) use (&$namespaceMetadata) {
// Enregistrez les informations finales du préfixe de l'espace de noms
$timestamp = date('Y-m-d H:i:s');
$namespaceMetadata[] = [
'prefix' => $prefix,
'ended_at' => $timestamp
];
echo "Espace de noms '{$prefix}' exister {$timestamp} Finition。\n";
});
// simulation XML données(含Espace de noms)
$xmlData = <<<XML
<root xmlns:h="http://gitbox.net/hello" xmlns:f="http://gitbox.net/foo">
<h:header>tête</h:header>
<f:footer>La queue</f:footer>
</root>
XML;
// Analyse XML données
if (!xml_parse($parser, $xmlData, true)) {
echo "XML erreur: " . xml_error_string(xml_get_error_code($parser));
exit;
}
// 销毁Analyseur资源
xml_parser_free($parser);
// 输出所有元données
print_r($namespaceMetadata);
Définition du processeur de fin d'espace de noms <br> Utilisez des fonctions anonymes pour définir le processeur, enregistrez l'heure actuelle et le préfixe à la fin de la déclaration de l'espace de noms.
Exemple XML
XMLNS: H et XMLNS: F Définissez deux espaces de noms, correspondant à http://gitbox.net/hello et http://gitbox.net/foo respectivement.
Stockage des métadonnées <br> Tous les enregistrements d'événements de fin sont enregistrés dans le tableau $paceMetadata et peuvent être utilisés pour l'exploitation forestière, le débogage ou les fins statistiques ultérieurement.
La fin de la portée de l'espace de noms de débogage
Analyse de la complexité des structures imbriquées dans les espaces de noms
Générer le journal du cycle de vie de l'espace de noms
Combiné avec le processeur de démarrage (xml_set_start_namespace_decl_handler) pour le suivi complet
Avec la fonction XML_SET_END_NAMESPACE_DECL_HANDLER , nous pouvons exécuter une série de logique raffinée à la fin du cycle de vie de la déclaration de l'espace de noms. Cette capacité est particulièrement importante lorsque vous traitez des documents XML avec des structures d'espace de noms complexes, en particulier dans les scénarios où les événements de fin d'espace de noms doivent être collectés, enregistrés ou répond aux événements de fin d'espace de noms. L'utiliser avec d'autres fonctions d'analyse améliorera considérablement la flexibilité et la maintenabilité du traitement des données XML.