SimpleXML vs. CDATA & Attributes
Seit einiger Zeit ist es relativ einfach geworden, mithilfe von Php Xml Dateien zu verarbeiten – eine davon ist simple_xml. Die Handhabung ist wahnsinnig simple – daher auch der Name. Im Verlauf meiner Arbeit bin ich jedoch auf ein Problem gestoßen.
Meine Xml-Datei ist well-formed und liegt im utf-8 Format vor und wird auch problemlos eingelesen. Hier die Struktur der Datei als reduziertes Beispiel:
<a>
<b>
<c>
<d label="Firma" marker="Automobil" period="Sommer">
<[CDATA[This is the cdata part]]>
</d>
</c>
</b>
</a>
Diese Datei lade ich mit:
$this->xmlData = simplexml_load_file('test.xml', NULL, LIBXML_NOCDATA);
So bekomme ich alle CDATA Inhalte, jedoch nicht mehr alle Attribute.
Lade ich die Datei mit:
$this->xmlData = simplexml_load_file('test.xml');
Bekomme ich alle Attribute, jedoch keine CDATA Inhalte.
Um alle Inhalte zu erhalten, ist dieser Weg nötig:
Die XML Datei mit der Option ‘LIBXML_NOCDATA’ laden, um die CDATA Inhalte zu erreichen. Auch wenn diese noch nicht über ‘print_r’ oder ‘var_dump’ sichtbar sind, so sind diese bereits im Simple_xml Objekt enthalten. Um diese Werte anzuzeigen, den gewünschten Knoten mittels ‘var_dump’ anzeigen.
var_dump($this->xmlData->b->c->d)
Dies ist bereits als Bug erfasst und beruht darauf, das das SimpleXML Objekt überladen wird.
Erschienen in: Freizeit