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


iOS Probleme mit transition

Autor*in: Florian Müller


Technologie // User Experience & Design


Heute ist mir bei einem Projekt ein Problem mit iOS begegnet. Es gibt eine Galerie, bei welcher die Elemente von oben „hereinfliegen“. Auf dem iPad und dem iPhone war dieser Effekt kaum beziehungsweise gar nicht vorhanden, sondern das Bild war einfach *plopp* da. Problem hierbei ist, dass transitions bei iOS ohne Hardware Beschleunigung gerendert werden. …


Beitrag lesen
28
SEP
16

Workshop-Bericht „AI-driven Software-Development mit GPT und Co.“

Autor*in: Magdalena Piller


infomax   //   Technologie


Anfang November konnte ich an der W-JAX 2024 in München teilnehmen, einer der führenden Entwicklerkonferenzen in Deutschland, die sich auf die neuesten Trends in der Softwareentwicklung, Architektur und Innovation konzentriert. Im Fokus der diesjährigen Konferenz standen unter anderem die Themen Künstliche Intelligenz (KI), Machine Learning und Cloud-native Technologien. Besonders begeistert war ich vom Workshop „AI-driven …


Beitrag lesen
20
NOV
24

Netbeans und GIT

Autor*in: Florian Müller


Technologie


Ich habe mich mal während der Arbeit mit Git mit den Git Hooks beschäftigt. Ziel war es, unnötige Builds in der Pipeline zu vermeiden, welche aufgrund von Lintern fehlschlagen. Dazu wollte ich einen Pre-Commit Hook einsetzen. Ein simpler Hook, welcher vor einem Commit ausgeführt werden sollte: Wenn man über die Command line commiten will, wird diese auch …


Beitrag lesen
21
APR
17

Textfield-Resize des Browsers steuern

Autor*in: Axel Güldner


Technologie


Wer hat dieses Textfield-Resize eigentlich eingeführt? War es der Chrome der es das erste mal angeboten hat? War es der Safari? Egal, Apple oder Google, einer von beiden ist mit Sicherheit schuld. Aber Moment, wovon rede ich da eigentlich? Dem einen oder anderen, vielleicht ja auch jedem, ist evtl. aufgefallen, dass sich Textfields in Formularen …


Beitrag lesen
05
APR
12