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


Templating with good ol‘ Javascript

Autor*in: Benjamin Hofmann


Technologie


Die letzten Tage bin ich auf eine interessante Technik gestoßen, mit der man ein sehr simples Templating in Vanilla JS umsetzen kann. Das Ganze orintiert sich an den Techniken, die z.B. Handlebars.js oder die originale Micro-Templating-Technik von John Resig nutzen, ist jedoch deutlich kleiner. Der Code Der komplette Code basiert auf RequireJS, kann aber natürlich …


Beitrag lesen
29
SEP
16

PHP Locale Setting für Windows

Autor*in: Stefan Oswald


Technologie


Um deutsche Locales unter PHP auf einem Linux-System zu verwenden, setzt man einfach die gewünschte Locale-Einstellung (z.B. LC_TIME) auf de_DE.utf8, und in der Regel passt das dann. Zur Not kann man sich mit dem Kommandozeilen-Parameter locale -a auch einfach die verfügbaren Locales ausgeben lassen und weiß dann Bescheid. Falls die benötigte Locale nicht installiert ist, …


Beitrag lesen
16
DEZ
11

Parallax Scrolling – ein cooler Effekt der nicht ganz neu ist

Autor*in: Axel Güldner


Technologie // User Experience & Design


Heute wollte ich mal kurz einen Effekt vorstellen, den viele sicher schon mal gesehen haben, ihn toll fanden, aber keine Ahnung hatten wie das eigentlich funktioniert. Das Thema ist Parallax Scrolling, ein Effekt der auf Websites auftritt, wenn verschiedene Hintergrund Ebenen ein unterschiedliches Scrollverhalten aufweisen. Dies wirkt unerwartet und frisch, da dies nicht die gewohnte …


Beitrag lesen
17
NOV
11

Augmented Reality trifft TYPO3: POIs neu erleben

Autor*innen: Verena Schmuck, David Kelemen


infomax   //   Projekte   //   Technologie   //   Über den Tellerrand


Wie bringt man POIs auf mobilen Geräten intuitiv und platzsparend zur Anzeige? Diese Frage stand am Anfang von Davids Abschlussprojekt der Ausbildung zum Fachinformatiker Anwendungsentwicklung und wurde mit einer innovativen Lösung beantwortet: dem imx.ARBrowser, einer TYPO3-Erweiterung zur Darstellung von POIs in einer Augmented-Reality-Ansicht.


Beitrag lesen
29
JUL
25