内のエンティティをデコードする私は、次の行動を経験している:PHP、SimpleXMLのは、CDATA
$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は、 "テキストノードとして[s]はCDATAをマージする" と言います。私にとってこれは、CDATAがテキストノードと同じように扱われること、あるいは3番目の例の動作が2番目の例と同じになることを意味します。
XML(これは外部ソースからのフィード)を制御できません。そうでなければ、何もしないのでCDATAタグを削除して、必要な動作を破棄します。
上記の例は、なぜ動作しますか? SimpleXMLをテキストノードを扱うのと同じ方法でCDATAノードを扱えるようにする方法はありますか?私はそのオプションを理解していないように見えるので、「CDATAをテキストノードとしてマージする」とは実際に何をしていますか?
私は現在データを取り出した後にデコードしていますが、上記の例はまだわかりません。
'print'には文字列コンテキストがありますその場合は文字列にキャストする必要はありません。 – hakre
@hakreしかし、 'print'(もっと一般的に' echo'と書かれています)は、デバッグが何か他のものに置き換えられている間にスタンドとして使用される可能性が高いので、一貫して文字列キャストを行うのは良い習慣です後の混乱を避ける。 – IMSoP