Stefan-Ganz.de > Home > Story

PHP SimpleXML und CDATA

04.02.2011 von Stefan Ganz (0 Kommentare)

SimpleXML ist eine hervorragende Klasse zum einfachen Verarbeiten und Erzeugen von XML in PHP 5.

Bei einem aktuellen Projekt erzeuge ich einen XML-String, der zum Teil auch Daten aus einem Webformular enthält. Trotz ausreichender Validierung der eingegebenen Daten ist es notwendig, gewisse Strings als CDATA-Blöcke in das XML zu integrieren.

SimpleXML kann seit PHP 5.1.0 mittels des Parameters LIBXML_NOCDATA in der Funktion simplexml_load_file zwar CDATA lesen und verarbeiten, jedoch gibt es keine Out-of-the-Box-Lösung zum Einfügen von CDATA-Blöcken.

Nach langer Suche bin ich auf mehrere Workarounds gestoßen. Der mit Abstand eleganteste ist meiner Meinung nach dieser:

class SimpleXMLExtended extends SimpleXMLElement{   
  public function addCData($cdata_text){   
   $node= dom_import_simplexml($this);   
   $no = $node->ownerDocument;   
   $node->appendChild($no->createCDATASection($cdata_text));   
  }   
}   
   
$doc = new SimpleXMLExtended($xml);   
$element = $doc->addChild('response');   
$node_note = $element->addChild('note');   
$node_note->addCData('my cdata guff');   
var_dump($doc->asXML());

Vielen Dank an http://coffeerings.posterous.com/php-simplexml-and-cdata für diese schöne Lösung!
 

Zurück

Einen Kommentar schreiben