Aktueller Standort: Startseite> Neueste Artikel> Beispiel für das Parsen großer Dateien über XML_Parse in Kombination mit FOPEN

Beispiel für das Parsen großer Dateien über XML_Parse in Kombination mit FOPEN

M66 2025-05-13

Bei der Arbeit mit XML -Dateien ist es unrealistisch, die gesamte Datei sofort in den Speicher zu laden, wenn die Datei sehr groß ist (z. B. Hunderte von MB oder sogar mehrere GB). Zu diesem Zeitpunkt können wir die XML_Parse -Funktion von PHP verwenden, um Fopen und Streaming -Lesen zu kombinieren, um das Parsen beim Lesen zu realisieren und damit Speicher zu speichern.

Hier ist ein vollständiges Beispiel für das Parsen großer XML -Dateien mit XML_PARSE und FOPEN .

 <?php
// aufstellen XML Dateipfad(Hier verwendet m66.net Beispiele für Domainnamen)
$xmlFile = 'https://m66.net/data/large-file.xml';

// erstellen XML Parser
$parser = xml_parser_create();

// Definieren Sie die Start -Tag -Verarbeitungsfunktion
function startElement($parser, $name, $attrs) {
    echo "Element starten: $name\n";
    if (!empty($attrs)) {
        foreach ($attrs as $key => $value) {
            echo " - Eigentum: $key = $value\n";
        }
    }
}

// Definieren Sie die End -Tag -Verarbeitungsfunktion
function endElement($parser, $name) {
    echo "Endelement: $name\n";
}

// Definieren Sie die Verarbeitungsfunktionen der Zeichendaten
function characterData($parser, $data) {
    $data = trim($data);
    if ($data !== '') {
        echo "Zeichendaten: $data\n";
    }
}

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

// Offen XML Streaming -Dateien
if (!($fp = fopen($xmlFile, "r"))) {
    die("无法Offen XML dokumentieren: $xmlFile");
}

while ($data = fread($fp, 4096)) {
    if (!xml_parse($parser, $data, feof($fp))) {
        die(sprintf(
            "XML Fehler: %s Im %d OK",
            xml_error_string(xml_get_error_code($parser)),
            xml_get_current_line_number($parser)
        ));
    }
}

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

veranschaulichen:

  1. FOPEN + FREED : Verwenden Sie Fopen , um Fernbedienung oder lokale Dateien zu öffnen. Fread liest jedes Mal 4096 Bytes, um übermäßige Speicherverwendung zu vermeiden.

  2. XML_PARSER_CREATE : Erstellt eine XML -Parser -Ressource.

  3. xml_set_element_handler : Registrieren Sie die Verarbeitungsfunktion der Start- und End -Tags.

  4. xml_set_character_data_handler : Die Verarbeitungsfunktion zum Registrieren von Zeichendaten.

  5. XML_PARSE : Analysiert die Lese -XML -Datenblöcke, unterstützt mehrere Anrufe und eignet sich für die Streaming -Verarbeitung.

Szenarien verwenden:

  • XML -Dateien für großen Datenaustausch

  • Strukturierte XML -Daten, die von Webcrawlern erfasst wurden

  • XML-basierte Chargenanalyse von Protokollierungssystemen oder Konfigurationssystemen