SimpleXML und CDATA
Seit PHP5 gibt es ein neues Modul in PHP, um XML-Dateien spielend leicht zu parsen: SimpleXML.
Das ganze hat jedoch einen entscheidenden Nachteil: CDATA aus XML-Dateien wird nicht interpretiert. Das heißt auf Deutsch: Wenn man in XML Zeichen wie <, > oder & einfügen will, muss man diese umwandeln in <, > und & – das sieht natürlich nicht sehr schön aus und nimmt Platz weg. Beispiel:
<?xml version="1.0" encoding="utf-8"?> <xmlfile> <item>Fünf ist größer als 2: 5 > 2</item> </xmlfile>
Das wäre dann eine ungültige XML-Datei, weil das Zeichen “>” direkt vorkommt.
Dafür gibt es nun die CDATA-Abschnitte: Innerhalb dieser Abschnitte darf <, > und & direkt stehen und wird vom Parser quasi ignoriert. Beispiel:
<![CDATA[Fünf ist größer als 2: 5 > 2]]>
Dies wäre nun gültiges XML. Das Problem mit SimpleXML ist dabei allerdings, dass dieses beim Parsen die CDATA-Abschnitte komplett weglässt, als würde dort oder stehen.
Manche Leute versuchen das ganz kompliziert zu lösen – dabei hätte ein Blick in die Dokumentation doch auch schon genügt. Dort steht nämlich folgende Option beschrieben:
LIBXML_NOCDATA (integer) Merge CDATA as text nodes
Zu gut Deutsch: “CDATA als normalen Text behandeln”.
Gibt man nun diese Option bei simplexml_load_file() oder simplexml_load_string() mit an, so löst sich das Problem ganz von selbst auf:
simplexml_load_file('xmldatei.xml', null, LIBXML_NOCDATA);
So leicht geht das.