Ако някога сте генерирали XML и сте имали нужда от добавяне на CData, най-вероятно сте стигнали до проблема, който достигнахме и ние.

Ето просто решение на проблема, чрез създаване на един малък клас надграждащ SimpleXMLElement:

class SimpleXMLExtended extends SimpleXMLElement {
    public function addCData($cdata_text) {
        $node = dom_import_simplexml ( $this );
        $no = $node->ownerDocument;
        $node->appendChild ( $no->createCDATASection ( $cdata_text ) );
    }
}

Малко примерче за употреба:

$xml = new SimpleXMLExtended ( '<results/>' );
$result = $xml->addChild ( 'result' );
foreach ( $data as $k => $v ) {
    $node = $result->addChild ( $k );
    $node->addCData ( $v );
}

Резултат:

<?xml version="1.0"?>
<results>
    <result>
        <key>
            <![CDATA[value]]>
        </key>
    </result>
</results>

Вижте още: