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.
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;
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.
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"
}
]
}
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.