Foros del Web » Programando para Internet » PHP »

Extraer texto de Cadenas sacadas de XML

Estas en el tema de Extraer texto de Cadenas sacadas de XML en el foro de PHP en Foros del Web. Hola comunidad, he estado rompiendome la cabeza, pero no he logrado arreglar este problemilla. Yo bajo informacion de un RSS de Música, y en el ...
  #1 (permalink)  
Antiguo 13/08/2009, 15:56
Avatar de Payin  
Fecha de Ingreso: mayo-2007
Mensajes: 92
Antigüedad: 16 años, 11 meses
Puntos: 0
[SOLUCIONADO] Extraer texto de Cadenas sacadas de XML

Hola comunidad, he estado rompiendome la cabeza, pero no he logrado arreglar este problemilla. Yo bajo informacion de un RSS de Música, y en el TAG <DESCRIPCION> me viene algo como esto (especificamente esto)

Código PHP:
<![CDATA[ <img src="http://www.dinamita.com.ar/manager/images/logos/contenidos_132547.jpg" border="0" alt="" /> Es como cuando dijeron que había muertoseñaló el Beatle al comentar una noticia que aseguraba que abandonaría los escenarios después de su próxima gira mundial. ]]> 
Bueno, yo tengo este codigo con estas dos funciones que teoricamente me "sacarian" por separado la imagen y la descripcion

Código PHP:
<?php
require("simplepie.inc");
function 
getCadenaDesc($cadena){
   
$maximo strlen($cadena);
   
$imagenComienzo '/>';
   
$imagenFinal "]]>";
   
$total strpos($cadena,$imagenComienzo);
   
$total2 strpos($cadena,$imagenFinal);
   if (
$total2 === false) {
       echo 
"No se encontro ".$caracter." en la cadena '$mi_cadena'";
        }
   
$total3 = ($maximo $total2);
   
$final substr ($cadena$total+,-$total3);
   return (
$final);
}

function 
getCadenaImagen($cadena){
    
$maximo strlen($cadena);
   
$imagenComienzo '<img';
   
$imagenFinal '/>';
   
$total strpos($cadena,$imagenComienzo);
   
$total2 strpos($cadena,$imagenFinal);
   if (
$total2 === false) {
      echo 
"No se encontro ".$caracter." en la cadena '$mi_cadena'";
     }
  
$total3 = ($maximo $total2 2); //LE RESTO 2 PORQUE ES LA LONGITUD DE LOS CARACTERES DE IMAGENFINAL
  
$final substr ($cadena,$total,-$total3);
   return 
$final;
   }

$path "http://musicaeninternet.com.ar/rss/musica.xml";
$noticias = new SimplePie();
$noticias->set_feed_url($path);
$noticias->init();
$item $noticias->get_item(0); 
echo 
"Titulo: ".$item->get_title()."<br />";
$descripcion $item->get_description();
echo 
"Imagen: ".getCadenaImagen($descripcion)."<br />";
echo 
"Descripcion: ".getCadenaDesc($descripcion)."<br />";
?>
La funcion que saca la Imagen anda bárbaro, pero no sé porqué es que la funcion para sacar el texto no me saca nada. He probado muchas variantes, hasta las ingenuas, pero nada. Si pongo comillas en el "return" de la funcion getCadenaDesc me devuelve la Imagen y la Descripcion.
El problema es que entra en el if y me tira que no encuentra el "/>"(que es donde termina el tag IMG, ahi empezaria la descripcion textual de la noticia) dentro de la cadena que le paso por parametro, pero lo debería de encontrar.
Alguno tiene idea de porqué será?

Muchas gracias!

Última edición por Payin; 14/08/2009 a las 17:36 Razón: Error de tipeo
  #2 (permalink)  
Antiguo 13/08/2009, 17:59
Avatar de Ing_FOFO  
Fecha de Ingreso: agosto-2008
Ubicación: Guatemala
Mensajes: 104
Antigüedad: 15 años, 8 meses
Puntos: 8
Respuesta: Extraer texto de Cadenas sacadas de XML

Hola Payin

Deverias intentar con una libreria para PHP llamada nusoap, con esta obtienes el XML y puedes obtener los resultados de los tags e incluso de ids dentro de los tags

Ej: Supongamos que tenes dos tags una de musica y dentro de esta otra de año

<musica>
<anio>
</anio>
<musica>

Lo puedes obtener de esta forma

Código PHP:

$xmlcadena 
substr($text,$start,$stop-$iniciar+17);
$xmlfinal html_entity_decode($xmlcadena);
$xml simplexml_load_string($xmlfinal);
$Musica =(string) $xml->{'Musica'}->nombres;
$Musica = (string) $xml->{'Musica'}->apellidos;
$Anio= (string) $xml->{'Musica'}->{'anio'}; 
__________________
Si te ayude.... regalame un poquito de karma!!!

Los intelectuales resuelven los problemas; los genios ,los evitan.
Albert Einstein (1879-1955)
  #3 (permalink)  
Antiguo 14/08/2009, 09:04
Avatar de Payin  
Fecha de Ingreso: mayo-2007
Mensajes: 92
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Extraer texto de Cadenas sacadas de XML

Lo miraré, muchas gracias.

Igualmente creo que mi problema no está en levantar los datos del XML, es más, el tag description lo traigo sin problemas, Solo que ahi adentro existen tags HTML (el de imagen) que no puedo individualizar.

Muchas gracias nuevamente :)
  #4 (permalink)  
Antiguo 14/08/2009, 09:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Extraer texto de Cadenas sacadas de XML

El problema es tu "parser", por eso debes de usar un parser más adecuado como SimpleXML, o DOM XML, ya que es la forma correcta de traer los tags y más rápida.

Saludos.
  #5 (permalink)  
Antiguo 14/08/2009, 13:14
Avatar de Payin  
Fecha de Ingreso: mayo-2007
Mensajes: 92
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Extraer texto de Cadenas sacadas de XML

Ah, buenisimo, ya me pongo a mirar esas herramientas. Muchas gracias!
  #6 (permalink)  
Antiguo 14/08/2009, 17:35
Avatar de Payin  
Fecha de Ingreso: mayo-2007
Mensajes: 92
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Extraer texto de Cadenas sacadas de XML

Encontré la solucion, el tema es que una cadena CDATA[[ ]] (todo lo que esta ahi dentro) cuando la abris no toma ningun caracter de la etiqueta, y yo quería que "lea" hasta la ]]. Lo solucioné con ponerle el maximo de caracteres de la cadena como final al metodo. Pongo la solucion

Código PHP:
function getCadenaDesc($cadena){
   
$maximo strlen($cadena);
   
$imagenComienzo '/>';
   
$total strpos($cadena,$imagenComienzo);  
   
$total3 = ($maximo $total2);
   
$final substr ($cadena$total+,$maximo);
   return (
$final);

Saludos!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:08.