Noté que cuando se usa SimpleXMLElementen un documento que contiene esas etiquetas CDATA, el contenido es siempre NULL. ¿Cómo puedo solucionar esto?
Además, lo siento por enviar spam sobre XML aquí. He estado tratando de hacer funcionar un script basado en XML durante varias horas ...
<content><![CDATA[Hello, world!]]></content>
Probé el primer resultado en Google si buscas "SimpleXMLElement cdata", pero no funcionó.

Respuestas:
Probablemente no esté accediendo correctamente. Puede generarlo directamente o convertirlo en una cadena. (en este ejemplo, el casting es superfluo, ya que el eco lo hace automáticamente de todos modos)
Quizás tengas mejor suerte con
LIBXML_NOCDATA:fuente
print_r, de hecho no está accediendo a él correctamente. Escriba el código que realmente desea, probablemente conechoo con un(string)elenco, y encontrará que el contenido está bien. No utilice LIBXML_NOCDATA, es irrelevante.<anElement>a text node <aChildElement /> <![CDATA a cdata node]]> another text node</anElement>. Los nodos CDATA y de texto son de diferentes tipos, y SimpleXML rastrea esto para que pueda recuperar el XML que ingresó. Cuando aprieta un objeto SimpleXML en una matriz, arroja mucha información: nodos CDATA, comentarios, cualquier elemento que no sea en el espacio de nombres actual (p<someNSPrefix:someElement />. ej. ), la posición del elemento hijo en el texto, etc.LIBXML_NOCDATAconvierte los nodos CDATA en nodos de texto, pero no corrige el resto.El
LIBXML_NOCDATAtercer parámetro desimplexml_load_file()función es opcional . Esto devuelve el objeto XML con todos los datos CDATA convertidos en cadenas.Arreglar CDATA en SimpleXML
fuente
Esto funcionó para mí:
fuente
Esto está funcionando perfecto para mí.
fuente
¿Cuándo usarlo
LIBXML_NOCDATA?Agrego el problema al transformar XML a JSON.
Al acceder al objeto SimpleXMLElement, obtiene el CDATA:
Tiene sentido usarlo
LIBXML_NOCDATAporquejson_encodeno accedo al SimpleXMLElement para activar la función de conversión de cadenas, supongo que es__toString()equivalente.fuente