我遇到以下行为:
$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 将被视为与文本节点相同 - 或者第三个示例的行为现在将与第二个示例相同。
我无法控制 XML(它是来自外部源的提要),否则我只会删除 CDATA 标记,因为它什么都不做并破坏了我想要的行为。
为什么上面的例子表现得如此呢?有没有办法让 SimpleXML 以与处理文本节点相同的方式处理 CDATA 节点?“将 CDATA 合并为文本节点”实际上做了什么,因为我似乎不理解该选项?
提取数据后,我目前正在解码,但上面的示例对我来说仍然没有意义。