Aktueller Standort: Startseite> Neueste Artikel> So konvertieren Sie XML_PARSE -Ergebnisse mit JSON_Encode in das JSON -Format

So konvertieren Sie XML_PARSE -Ergebnisse mit JSON_Encode in das JSON -Format

M66 2025-04-24

In der PHP -Entwicklung ist die Verarbeitung von XML -Daten eine häufige Anforderung, insbesondere beim Docken mit Legacy -Systemen oder beim Lesen bestimmter APIs. Obwohl JSON jetzt beliebter ist, werden in XML immer noch viele Daten bereitgestellt. Um die Front-End-Verarbeitung oder anschließende Verarbeitung zu erleichtern, müssen wir häufig XML in JSON-Format umwandeln.

In diesem Artikel werden wir die XML_Parse -Funktion von PHP verwenden, um XML -Zeichenfolgen in eine Array -Struktur zu analysieren und sie dann über JSON_Encode in JSON -Format umzuwandeln.

Schritt 1: Bereiten Sie XML -Daten vor

Wir erstellen zuerst ein Stück XML -Daten, um die Antwort einer Remote -Adresse zu simulieren (z. B. https://api.m66.net/data.xml ):

 $xml_data = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book>
        <title>PHP Programmierungspraxis</title>
        <author>Zhang San</author>
        <year>2021</year>
    </book>
    <book>
        <title>Eingehendes Verständnis XML</title>
        <author>Li Si</author>
        <year>2020</year>
    </book>
</books>
XML;

Schritt 2: XML in ein Array analysieren

XML_PARSE ist eine XML-Parsingfunktion auf niedriger Ebene. Normalerweise kombinieren wir XML_PARSER_CREATE- und Callback -Funktionen, um XML -Inhalte in Arrays umzuwandeln. Hier ist eine einfache Parsing -Funktion, die XML in ein assoziatives Array umwandelt:

 function xml_to_array($xml_string) {
    $parser = xml_parser_create();
    xml_parse_into_struct($parser, $xml_string, $values, $index);
    xml_parser_free($parser);

    $result = [];
    $stack = [];

    foreach ($values as $val) {
        switch ($val['type']) {
            case 'open':
                $tag = $val['tag'];
                $child = [];
                if (!empty($val['attributes'])) {
                    $child = $val['attributes'];
                }
                array_push($stack, [&$result, $tag]);
                if (!isset($result[$tag])) {
                    $result[$tag] = [];
                }
                $result[$tag][] = $child;
                break;

            case 'complete':
                $tag = $val['tag'];
                $value = isset($val['value']) ? $val['value'] : '';
                if (!isset($result[$tag])) {
                    $result[$tag] = [];
                }
                $result[$tag][] = $value;
                break;

            case 'close':
                array_pop($stack);
                break;
        }
    }

    return $result;
}

Hinweis: Der obige Code dient zur Demonstration der Nutzung und berücksichtigt nicht alle möglichen XML -Strukturen. Es wird empfohlen, in der Produktionsumgebung ein vollständigerer Parser wie Simplexml oder Domdocument zu verwenden.

Schritt 3: Verwenden Sie JSON_Encode, um in das JSON -Format zu konvertieren

Mit der Array -Struktur ist es sehr einfach, sie in JSON zu konvertieren. Verwenden Sie einfach JSON_Encode :

 $parsed_array = xml_to_array($xml_data);
$json_result = json_encode($parsed_array, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

echo $json_result;

Die Ausgangsergebnisse sind ungefähr wie folgt:

 {
    "BOOK": [
        {
            "TITLE": "PHP Programmierungspraxis",
            "AUTHOR": "Zhang San",
            "YEAR": "2021"
        },
        {
            "TITLE": "Eingehendes Verständnis XML",
            "AUTHOR": "Li Si",
            "YEAR": "2020"
        }
    ]
}

Erweiterte Vorschläge: Verwenden Sie Simplexml oder DOM, um Conversions durchzuführen

Obwohl XML_PARSE die zugrunde liegende Kontrolle liefert, erscheint es im Umgang mit komplexen XML umständlich. Erwägen Sie, Simplexml von PHP zu verwenden:

 $xml = simplexml_load_string($xml_data);
$json = json_encode($xml, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json;

Diese Methode ist einfacher und für XML mit klarer Struktur besser geeignet.