Position actuelle: Accueil> Derniers articles> Coopérer avec xml_set_start_namespace_decl_handler, utilisez xml_set_end_namespace_decl_handler pour compléter la déclaration de l'espace de noms

Coopérer avec xml_set_start_namespace_decl_handler, utilisez xml_set_end_namespace_decl_handler pour compléter la déclaration de l'espace de noms

gitbox 2025-05-26

Vous trouverez ci-dessous un exemple de code PHP utilisant le XML_SET_START_NAMESPACE_DECL_HANDLER et XML_SET_END_NAMESPACE_DECL_HANDLER . Ce code montre comment capturer une déclaration d'un espace de noms pendant l'analyse XML.

 <?php

// créer XML Analyseur
$parser = xml_parser_create();

// Définissez la fonction de rappel au début de la déclaration d&#39;espace de noms
xml_set_start_namespace_decl_handler($parser, "startNamespaceHandler");

// Définissez la fonction de rappel à la fin de la déclaration d&#39;espace de noms
xml_set_end_namespace_decl_handler($parser, "endNamespaceHandler");

// XML Chaîne
$xml_data = <<<XML
<root xmlns:foo="http://gitbox.net/foo" xmlns:bar="http://gitbox.net/bar">
    <foo:item>Item 1</foo:item>
    <bar:item>Item 2</bar:item>
</root>
XML;

// Analyse XML données
if (!xml_parse($parser, $xml_data)) {
    die(sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser)));
}

// 释放Analyseur
xml_parser_free($parser);

// Fonction de rappel au début de la déclaration de l&#39;espace de noms
function startNamespaceHandler($parser, $prefix, $uri) {
    echo "Namespace start: Prefix = {$prefix}, URI = {$uri}\n";
}

// Fonction de rappel à la fin de la déclaration de l&#39;espace de noms
function endNamespaceHandler($parser, $prefix) {
    echo "Namespace end: Prefix = {$prefix}\n";
}

?>

Analyse de code

  1. Créer un analyseur XML :
    Utilisez XML_PARSER_CREATE () pour créer une nouvelle instance d'analyse XML.

  2. Définissez la fonction de rappel de la déclaration de l'espace de noms :
    Les fonctions de rappel sont définies pour les étapes de début et de fin de la déclaration d'espace de noms par XML_SET_START_NAMESPACE_DECL_HANDLER et XML_SET_END_NAMESPACE_DECL_HANDLER Les fonctions respectivement. Ces fonctions de rappel sont automatiquement appelées lorsque l'analyseur rencontre une déclaration d'espace de noms.

  3. Analyse des données XML :
    Passez les données XML à l'analyseur via la fonction XML_PARSE () pour démarrer le processus d'analyse. Si une erreur est rencontrée, xml_error_string () et xml_get_current_line_number () peuvent nous aider à localiser et à signaler les erreurs.

  4. Traitement de l'espace de noms :

    • La fonction de rappel startNamespaceHandler reçoit trois paramètres: l'instance d'analyse, le préfixe de l'espace de noms et l'URL. Lorsqu'une déclaration de l'espace de noms est rencontrée, elle publie le préfixe et l'URL de l'espace de noms.

    • La fonction de rappel EndNamesPaceHandler reçoit deux paramètres: le préfixe de l'instance d'analyse et l'espace de noms. Il sera appelé à la fin de la déclaration de l'espace de noms, en sortant le préfixe de l'espace de noms.

Choses à noter

  • Dans les applications pratiques, les documents XML peuvent contenir plusieurs déclarations d'espace de noms, vous devez donc ajuster la logique de traitement selon les besoins pour vous assurer que tous les espaces de noms sont traités correctement.

  • Ces deux fonctions de rappel fournissent un mécanisme puissant qui vous permet de contrôler avec précision le processus d'analyse de l'espace de noms, particulièrement utile lorsque vous traitez des données XML complexes.

En combinant XML_SET_START_NAMESPACE_DECL_HANDLER et XML_SET_END_NAMESPACE_DECL_HANDLER , vous pouvez mieux gérer les espaces de noms lors de l'analyse des documents XML, en vous garantissant que les déclarations d'espace de noms sont gérées avec précision.