Position actuelle: Accueil> Derniers articles> Exemple d'analyse des fichiers volumineux via XML_PARSE combinés avec FOPEN

Exemple d'analyse des fichiers volumineux via XML_PARSE combinés avec FOPEN

M66 2025-05-13

Lorsque vous travaillez avec des fichiers XML, il n'est pas réaliste de charger le fichier entier en mémoire à la fois si le fichier est très grand (par exemple, des centaines de MB ou même plusieurs GB). À l'heure actuelle, nous pouvons utiliser la fonction XML_PARSE de PHP pour combiner Fopen et Streaming Reading pour réaliser l'analyse pendant la lecture, enregistrant ainsi la mémoire.

Voici un exemple complet de l'analyse de grands fichiers XML à l'aide de XML_PARSE et FOPEN .

 <?php
// installation XML Chemin de fichier(Utilisé ici m66.net Exemples de noms de domaine)
$xmlFile = 'https://m66.net/data/large-file.xml';

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

// Définissez la fonction de traitement de la balise de démarrage
function startElement($parser, $name, $attrs) {
    echo "Élément de démarrage: $name\n";
    if (!empty($attrs)) {
        foreach ($attrs as $key => $value) {
            echo " - propriété: $key = $value\n";
        }
    }
}

// Définissez la fonction de traitement de la balise finale
function endElement($parser, $name) {
    echo "Élément final: $name\n";
}

// Définir les fonctions de traitement des données du caractère
function characterData($parser, $data) {
    $data = trim($data);
    if ($data !== '') {
        echo "Données de caractère: $data\n";
    }
}

// installation处理函数
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");

// Ouvrir XML Fichiers de streaming
if (!($fp = fopen($xmlFile, "r"))) {
    die("无法Ouvrir XML document: $xmlFile");
}

while ($data = fread($fp, 4096)) {
    if (!xml_parse($parser, $data, feof($fp))) {
        die(sprintf(
            "XML erreur: %s Dans le %d D&#39;ACCORD",
            xml_error_string(xml_get_error_code($parser)),
            xml_get_current_line_number($parser)
        ));
    }
}

fclose($fp);
xml_parser_free($parser);
?>

illustrer:

  1. FOPEN + FREAD : Utilisez FOPEN pour ouvrir des fichiers distants ou locaux. Fread lit 4096 octets à chaque fois pour éviter une utilisation excessive de la mémoire.

  2. XML_PARSER_CREATE : Crée une ressource d'analyse XML.

  3. xml_set_element_handler : enregistrez la fonction de traitement des balises de début et de fin.

  4. XML_SET_CHARACTER_DATA_HANDLER : La fonction de traitement pour enregistrer les données des caractères.

  5. XML_PARSE : analyse les blocs de données XML Read, prend en charge plusieurs appels et convient au traitement en streaming.

Utilisez des scénarios:

  • Fichiers XML pour l'échange de données important

  • Données XML structurées capturées par des robots Web

  • Analyse par lots basée sur XML des systèmes de journalisation ou des systèmes de configuration