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


Marzipano – a 360° viewer for the modern web

Autor*in: Benjamin Hofmann


Projekte   //   Strategie & Konzeption   //   Technologie


Marzipano Alt
Beschreibungstext Beschreibungstext

Im Zuge einer Aufwandsschätzung für zur Einbindung von 360°-Panoramen, die vom Kunden selbst erstellt und eingebunden werden können, bin ich auf Marzipano gestoßen. Ein Skript, welches das mit Bravour erledigt und mit 55 KB Dateigröße (komprimiert) auch einen relativ kleinen Footprint hat. Das Tool wird übrigens von Mitarbeitern von Google entwickelt, ist aber kein offizielles …


Beitrag lesen
16
JAN
17

kraken.io: Einfaches Web Interface zur Bild-Optimierung

Autor*in: Benjamin Hofmann


Technologie // User Experience & Design


Auch wenn wir inzwischen vermehrt skalierbare Iconfonts oder SVG-Grafiken einsetzen, so kommt es doch immer wieder vor, dass wir auch Rastergrafiken in den Formaten JPEG, GIF oder PNG im Layout einsetzen. Was wir aber allzu oft übersehen ist, dass man bei diesen einiges an Dateigröße sparen kann. Und das kommt inzwischen nicht nur denen zugute, …


Beitrag lesen
28
NOV
14

Flash stirbt, aber wie geht es weiter?

Autor*in: Axel Güldner


Technologie // User Experience & Design


Wir sind uns sicher weitestgehend einig, dass Flash am Sterben ist. Apple hat mit seiner Entscheidung, Adobes Plugin auf mobilen Geräten nicht zu unterstützen, eine Entwicklung ausgelöst, an derren Ende das Flashplugin komplett verschwinden wird. Und wir sind uns auch sicher hier wieder größtenteils einig, wenn ich behaupte, Flash werden nur wenige vermissen. Aber wie …


Beitrag lesen
23
FEB
12

Styling von Checkboxen und Radiobuttons

Autor*in: Benjamin Hofmann


Technologie   //   User Experience & Design


Wieder einmal ein Linktipp: Customizing web forms with CSS3 and WebKit Leider funktionieren diese Styles, so wie sie im Artikel dargestellt werden, nur in WebKit-basierten Browsern, also im Safari, Chrome oder den Standard-Browsern von Android und iOS. Aber wenn diese Styles nicht angewandt werden können springt der jeweilige Browser auf die normale Darstellung zurück, wie …


Beitrag lesen
23
FEB
12