Noté que cuando se usa SimpleXMLElement
en 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 conecho
o 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_NOCDATA
convierte los nodos CDATA en nodos de texto, pero no corrige el resto.El
LIBXML_NOCDATA
tercer 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_NOCDATA
porquejson_encode
no accedo al SimpleXMLElement para activar la función de conversión de cadenas, supongo que es__toString()
equivalente.fuente