Position actuelle: Accueil> Derniers articles> Comment utiliser la fonction XML_SET_DEFAULT_HANDLER pour gérer le contenu des commentaires dans des documents XML?

Comment utiliser la fonction XML_SET_DEFAULT_HANDLER pour gérer le contenu des commentaires dans des documents XML?

M66 2025-06-15

Lors du traitement des documents XML en PHP, l'une des méthodes d'analyse couramment utilisées est l'analyseur XML basé sur l'événement (Expat). Lorsque vous analysez XML avec expatrié, vous pouvez enregistrer diverses fonctions de rappel pour traiter différents nœuds XML, tels que le démarrage de l'élément, l'élément End, les données des caractères, etc. Pour le contenu d'annotation dans XML, l'expat de PHP n'a pas de fonction de rappel spéciale par défaut, mais nous pouvons utiliser la fonction XML_SET_DEFAULT_HANDLER pour capturer les informations d'annotation.

Qu'est-ce que xml_set_default_handler?

XML_SET_DEFAULT_HANDLER est une fonction de l'analyseur XML dans PHP, qui définit une fonction de traitement par défaut. Cette fonction de traitement par défaut est appelée lorsqu'un fragment XML qui n'est pas traité par une fonction de rappel spéciale est rencontré. Les commentaires, les sections CDATA, etc. déclencheront la fonction de traitement par défaut.

Par conséquent, nous pouvons capturer le contenu d'annotation via le XML_SET_DEFAULT_HANDLER et le traiter en conséquence.

Exemple d'explication de code

Voici un exemple qui montre comment utiliser xml_set_default_handler pour traiter le contenu des commentaires dans XML:

 <?php
// Créer unXMLAnalyseur
$parser = xml_parser_create();

// Définir la fonction de traitement par défaut,Capturez les commentaires et autres contenus non revêtus
xml_set_default_handler($parser, 'defaultHandler');

// Définissez la fonction de traitement par défaut
function defaultHandler($parser, $data) {
    // Le contenu du commentaire est généralement<!--début,par-->Fin
    if (preg_match('/^<!--(.*)-->$/s', $data, $matches)) {
        echo "Commentez le contenu: " . trim($matches[1]) . "\n";
    } else {
        // 这里可par处理其他未捕获的contenu,commeCDATAattendez
        echo "Traiter le contenu par défaut: " . trim($data) . "\n";
    }
}

// LireXMLdonnées
$xml = <<<XML
<?xml version="1.0"?>
<!-- C&#39;estXMLCommentaires de -->
<root>
    <child>contenu</child>
    <!-- 子元素Commentaires de -->
</root>
XML;

// AnalyseXMLdonnées
if (!xml_parse($parser, $xml, true)) {
    die(sprintf("XMLAnalyse错误: %s Dans le %d D&#39;ACCORD",
        xml_error_string(xml_get_error_code($parser)),
        xml_get_current_line_number($parser)));
}

// Libérer les ressources
xml_parser_free($parser);
?>

Description du code:

  • Nous avons créé un analyseur d'analyseur .

  • La fonction Defaulthandler est enregistrée à l'aide de XML_SET_DEFAULT_HANDLER pour gérer tout le contenu qui n'est pas capturé par un rappel spécifique.

  • Dans la fonction de traitement par défaut, l'expression régulière est utilisée pour détecter si les données sont une annotation, et si oui, le contenu d'annotation est sorti.

  • Un autre contenu qui n'a pas été spécifiquement traité sera également sorti, mais nous nous concentrons ici principalement sur les commentaires.

Exemple de résultat d'exécution:

 Commentez le contenu: C&#39;estXMLCommentaires de
Traiter le contenu par défaut: 

Traiter le contenu par défaut: 

Commentez le contenu: 子元素Commentaires de

Comme vous pouvez le voir, le contenu du commentaire est capturé avec succès et la sortie.

résumé

En utilisant XML_SET_DEFAULT_HANDLER , nous pouvons gérer le contenu dans XML qui n'est pas capturé par d'autres rappels spéciaux, y compris les commentaires. Grâce à une correspondance régulière simple, le texte de commentaire peut être extrait pour le traitement correspondant.

Cette approche convient particulièrement à la personnalisation des commentaires tels que la journalisation, le filtrage ou l'extraction de contenu lors de l'utilisation de l'analyseur d'expatrié.