XML in JSON oder Arrays umwandeln in PHP

Datum: 8. April 2014
Autor*in: Stefan Oswald


Ich bin heute über die mir bisher in diesem Ausmaß noch gar nicht bekannte Mächtigkeit der JSON-Funktionen von PHP gestolpert: Wie sich bei einer imx.Mapwork Anpassung herausgestellt hat, kann json_encode() so ziemlich alles als Parameter erhalten – einschließlich SimpleXMLElement. Der einzige Typ, der nicht verarbeitet werden kann, ist „resource“.

Auf diese Art ist es sehr leiht, XML in JSON, und über diesen Umweg natürlich auch in ein assoziatives Array umzuwandeln:

$xml = simplexml_load_file('data.xml');
$json = json_encode($xml);
$array = json_decode($json, true);

Einen kleinen Pferdefuß gibt es dabei, aber auch der kann umgangen werden: CDATA-Sektionen werden nicht mit umgewandelt. Das PHP-Team bewertet dies interessanter Weise nicht als Bug [1] und sagt, man solle die CDATA-Tags vorher in Strings umwandeln. Bei einem automatisierten Prozess ist das natürlich nicht so einfach möglich… die Lösung ist aber denkbar einfach: Bei der Erzeugung des SimpleXMLElement muss die Option LIBXML_NOCDATA verwendet werden. Dies ist standardmäßig nicht der Fall, aber man kann ein bestehendes SimpleXMLElement einfach erneut umwandeln:

/**
* Gives an array representation of the given SimpleXMLElement, using json_decode()
* to convert SimpleXMLElement to JSON and json_decode() to convert JSON to array.
* Also works for CDATA sections.
*
* @param SimpleXMLElement $xml
* @return array
*/
function xmlToArray(SimpleXMLElement $xml) {
$xmlString = $xml->asXML();
$xmlCopy = simplexml_load_string($xmlString, SimpleXMLElement, LIBXML_NOCDATA);
$json = json_encode($xmlCopy);
return json_decode($json, true);
}

Zuerst wird das bestehende SimpleXMLElement in einen String umgewandelt. Dieser wird dann wiederum in ein SimpleXMLElement umgewandelt, unter Verwendung der Parser-Option LIBXML_NOCDATA. Wird das somit erzeugte, neue SimpleXMLElement nun mit json_encode() geparst, werden die CDATA-Inhaltemit berücksichtigt.

[1] https://bugs.php.net/bug.php?id=41976


Dieser Artikel wurde verschlagwortet unter:


Kommentare

Selber kommentieren:






Weitere Beiträge zum Thema Technologie


OOP 2014

Autor*in:


Projekte // Technologie // Über den Tellerrand


Auf geht’s zu Tag 2 auf der OOP in München. Dieses Jahr steht die Konferenz unter dem Motto: Complexity – Managing Today’s Challenges. Und dieses Leitthema wurde gestern in zwei Keynotes von Tim Mattson (Intel Corp.) und Glenda Eoyang (Human System Dynamics Institute) bereits in seinen vielschichtigen Facetten aufgegriffen. Die Quintessenz: Komplexität (in IT-Projekten) lässt …


Beitrag lesen
05
FEB
14

imx.Platform: Release-Notes Januar 2020

Autor*in: Brigitta Zinsser


infomax   //   Technologie


imx.Platform

Nachdem von zahlreichen Kunden der Wunsch an uns herangetragen wurde, dass sie gerne regelmäßig über aktuelle Neuerungen in der imx.Platform informiert werden möchten, starten wir ab diesem Jahr mit monatlichen Informationen zu den Neuerungen in der imx.Platform. Dieses Mal geht es im Neuerungen, die in den letzten Wochen bis einschließlich 28.01.2020 bereitgestellt wurden.


Beitrag lesen
28
JAN
20

Bilder SEO – Bisher eigentlich komplett vernachlässigt

Autor*in: Axel Güldner


Technologie // User Experience & Design


Heute möchte ich ein Thema anschneiden, welches bisher wohl so niemand auf dem Schirm hatte (ich zumindest habe bisher keinen Gedanken daran verschwendet). Aber als ich dann in einem anderen Blog darüber gelesen habe, hat mich dann sofort die Faust der Erkenntnis getroffen, ähnlich einer Brockhaus-Enzyklopädie, die einem ins Gesicht fällt. Wir bemühen uns immer …


Beitrag lesen
07
FEB
12