Problema a la hora de parsear xml con cdata en php5
Hoy, estaba feliz intentando programar un script php para convertir un xml a una array utilizando la función simplexml_load_string, hasta que por causas que desconozco todavía, la array que obtenía era incompleta sin el valor de los CDATA.
Ejemplo xml:
<?xml version=’1.0′ encoding=’UTF-8′?><response status=”success”>
<artist weight=”95″><![CDATA[Despistaos]]></artist>
<artist weight=”95″><![CDATA[El Canto Del Loco]]></artist>
</response>
Resultado Array:
SimpleXMLElement Object
(
[@attributes] => Array
(
[status] => success
)
[artist] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[weight] => 95
)
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[weight] => 95
)
)
)
Apunto de tirarme al pozo sin agua, txarly me pasó este enlace donde explican la solución:
Si vas a leer directamente un fichero o una url de un xml:
$t_xml = simplexml_load_file( $file_or_url, ‘SimpleXMLElement’, LIBXML_NOCDATA );
O si vas a leer un string con el contenido de un xml:
$t_xml = simplexml_load_string( $str_xml, ‘SimpleXMLElement’, LIBXML_NOCDATA );
Resultado deseado:
SimpleXMLElement Object
(
[@attributes] => Array
(
[status] => success
)
[artist] => Array
(
[0] => Despistaos
[1] => El Canto Del Loco
)
)
Hola, estoy trabajando con un parseador de un lenguaje inventado para XML y sería bastante útil si quisieras hacer algún artículo con un ejemplo de como lo utilizas tú (por ejemplo para parsear información de discos) ya que podría extraporlarlo a mi ejemplo y sería enormemente útil (ya que no encuentro mucha documentación a parte de la básica de PHP y algún ejemplo básico por google).
Saludos y buen artículo.