PHPのSimpleXMLにてCDATAがあるXMLをロードする場合について
$xml = simplexml_load_string($s, 'SimpleXMLElement', LIBXML_NOCDATA);
とするとインスタンス内でCDATAを文字列として扱ってくれているが、SimpleXMLElement#asXML()で出力するとentity変換してくれる。CDATAでなく文字列として扱ってくれるためだろう。
$xml = simplexml_load_string($s, 'SimpleXMLElement');
とするとインスタンス内では文字列として扱ってくれない(var_dump()で見ると該当部分はSimpleXMLElementのオブジェクトだが空)。だが、SimpleXMLElement#asXML()では元のとおり出力してくれる。
<?php $s = <<<_EOF <?xml version="1.0" encoding="UTF-8" ?> <faq> <data> <no>番号</no> <title>タイトル</title> <question>質問</question> <answer>回答</answer> <flag>フラグ</flag> </data> <data> <no>1</no> <title>テストついて</title> <question><![CDATA[あいうえお かきくけこ <div id="test"> <p class="notice">テスト</p> </div> さしすせそ]]></question> <answer><![CDATA[アイウエオ カキクケコ サシスセソ]]></answer> <flag>0</flag> </data> </faq> _EOF; //$xml = simplexml_load_string($s, 'SimpleXMLElement', LIBXML_NOCDATA); $xml = simplexml_load_string($s, 'SimpleXMLElement'); var_dump($xml); print $xml->asXML(); ?>