次の動作が発生しています。
$xml_string1 = "<person><name><![CDATA[ Someone's Name ]]></name></person>";
$xml_string2 = "<person><name> Someone's Name </name></person>";
$person = new SimpleXMLElement($xml_string1);
print (string) $person->name; # Someone's Name
$person = new SimpleXMLElement($xml_string2);
print (string) $person->name; # Someone's Name
$person = new SimpleXMLElement($xml_string1, LIBXML_NOCDATA);
print (string) $person->name; # Someone's Name
PHPのドキュメントによると、NOCDATAは「CDATAをテキストノードとしてマージする」とのことです。私にとってこれは、CDATAがテキストノードと同じように扱われること、または3番目の例の動作が2番目の例と同じになることを意味します。
XML(外部ソースからのフィード)を制御できません。そうでない場合は、CDATAタグが何も実行されず、必要な動作が台無しになるため、CDATAタグを削除するだけです。
上記の例がそのように動作するのはなぜですか?SimpleXMLにテキストノードを処理するのと同じ方法でCDATAノードを処理させる方法はありますか?「CDATAをテキストノードとしてマージ」は、そのオプションを理解していないようですが、実際には何をしますか?
現在、データを取り出してからデコードしていますが、上記の例はまだ意味がありません。