Ich erlebe das folgende Verhalten:PHP, SimpleXML, Dekodieren Entitäten in 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
Die php docs sagen, dass NOCDATA "Merge [s] CDATA als Textknoten". Für mich bedeutet das, dass CDATA dann genauso wie Textknoten behandelt wird - oder dass das Verhalten des 3. Beispiels jetzt das gleiche wie im 2. Beispiel ist.
Ich habe keine Kontrolle über das XML (es ist ein Feed von einer externen Quelle), sonst würde ich nur das CDATA-Tag entfernen, da es nichts tut und das Verhalten zerstört, das ich will.
Warum verhält sich das obige Beispiel so? Gibt es eine Möglichkeit, SimpleXML die CDATA-Knoten auf die gleiche Weise behandeln zu lassen, wie es Textknoten behandelt? Was macht "CDATA als Textknoten zusammenführen" eigentlich, da ich diese Option nicht verstehe?
Ich entziffere gerade, nachdem ich die Daten herausgezogen habe, aber das obige Beispiel ergibt immer noch keinen Sinn für mich.
'print' String-Kontext hat, Sie muss in diesem Fall nicht in eine Zeichenfolge umgewandelt werden. – hakre
@hakre aber "print" (häufiger geschrieben "echo") wird wahrscheinlich als Ersatz verwendet, während Debugging dann durch etwas anderes ersetzt wird, also würde ich sagen, dass es eine gute Angewohnheit ist, das String-Casting konsequent durchzuführen vermeiden Sie spätere Verwirrung. – IMSoP