Foros del Web » Programando para Internet » PHP »

Generando xml desde PHP

Estas en el tema de Generando xml desde PHP en el foro de PHP en Foros del Web. Hola a Todos Compañeros, la verdad estoy creando un Weblog con un compañero y tengo problemas con las tildes. Aqui va el codigo de mi ...
  #1 (permalink)  
Antiguo 13/08/2004, 16:07
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Exclamación Generando xml desde PHP

Hola a Todos Compañeros, la verdad estoy creando un Weblog con un compañero y tengo problemas con las tildes.
Aqui va el codigo de mi funcion

Código PHP:
function crearRSS() {
  
    global $filename, $tituloweb, $url, $tema;

  $filename = strtolower(str_replace(' ', '', index)) . '.xml';

  if (file_exists($filename)) {
    @unlink($filename);
  }

  $handler = fopen($filename, 'w+');

  // Creamos las cabeceras para el RSS 
  $rssfile = "<?xml version="1.0\" encoding=\"iso-8859-1\"?>
<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"
  xmlns=\"http://purl.org/rss/1.0/\">
   <channel rdf:about=\""
.$url."\">
      <title>"
.$tituloweb."</title>
      <link>"
.$url $filename ."</link>
      <description>
         Generado desde nuesta DB
         "
.$tituloweb." ".$tema."
      </description>
      <items>
         <rdf:Seq>\n"
;
  
/* Sacamos la informacion de las noticias con una consulta anidada */
  
$SQL_query mysql_query('SELECT e.id,e.autorid,e.fecha,e.titulo,e.intro,e.texto,a.nombre,a.idautor'
                           
' FROM entradas AS e'
                           
' LEFT JOIN autores AS a ON(e.autorid=a.idautor)'
                           
' ORDER by e.id DESC LIMIT 0, 10');

   while(
$noticias mysql_fetch_assoc($SQL_query))
  {
    
/* Set Variables */
    
$time $noticias['fecha'];
    
$titulo $noticias['titulo'];
    
$intro $noticias['intro'];
    
$nombre $noticias['nombre'];

    if (!
$nombre)
    {
      
$usuario $noticias['nombre'];
    }
    
/* Mostramos el link hacia cada articulo */
    
if ($noticias['texto'] != '')
    {
      
$enlace $url '?op=leer&amp;entrada=' $noticias['id'] . '';
    }
    else if (
$noticias['texto'] != '')
    {
      
$enlace $url '?op=leer&amp;entrada=' $noticias['id'] . '';
    }
    else
    {
      
$enlace $url;
    }

    
// Creamos la tabla de contenido
    
$rssfile .= "            <rdf:li resource=\"".$titulo."\" />\n";

        
// Creamos la <item> constructora para cada noticia
        
$items .= "   <item rdf:about=\"".$enlace."\">
      <title>"
.str_replace('&quot;''"'$titulo) ."</title>
      <link>"
.$enlace."</link>
      <description>
         $intro
      </description>
      <pubDate>"
.$time."</pubDate> 

   </item>\n"
;
  }

  
// Cerramos la tabla de contenido
  
$rssfile .= "         </rdf:Seq>
      </items>
   </channel>\n"
;

  
// Agregamos noticias por item
  
$rssfile .= $items;

  
// Creamos el pie del archivo de RSS
  
$rssfile .= "</rdf:RDF>\n";

  
// Pone la secuencia $rssfile en el archivo de RSS
  
if(!fputs($handler$rssfile))
  {
    echo 
"no se pudo crear el Rss";
  }

  
fclose($handler);
}
Hasta aqui todo bien pero me genera el xmlpero a la hora de querer abrirlo con el navegador me sale esto

The XML page cannot be displayed
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.


--------------------------------------------------------------------------------

Reference to undefined entity 'ordf'. Error processing resource 'http://localhost/blog2/index.xml'. Line 25, Position 121


<rdf:li resource="La 1&ordf; Campa&ntilde;a Mundial de Seguridad en la Red ayuda a luchar contra el spam" />


El Xml generado es este

Código:
<?xml version="1.0" encoding="iso-8859-1"?>

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

  xmlns="http://purl.org/rss/1.0/">

   <channel rdf:about="http://localhost/blog/">

      <title>TLweblog</title>

      <link>http://localhost/blog/index.xml</link>

      <description>

         Generado desde nuesta DB

         TLweblog Aprendiendo Juntos

      </description>

      <items>

         <rdf:Seq>
            <rdf:li resource="Probando el BBCODE" />
            <rdf:li resource="La 1&ordf; Campa&ntilde;a Mundial de Seguridad en la Red ayuda a luchar contra el spam" />
         </rdf:Seq>

      </items>

   </channel>
   <item rdf:about="http://localhost/blog/?op=leer&amp;entrada=4">

      <title>Probando el BBCODE</title>

      <link>http://localhost/blog/?op=leer&amp;entrada=4</link>

      <description>

         La calidad nunca es un accidente; siempre es el resultado de un esfuerzo de la inteligencia
Este es un weblog que funciona muy bien pues :)

      </description>

	  <pubDate>13/8/2004</pubDate> 



   </item>
   <item rdf:about="http://localhost/blog/?op=leer&amp;entrada=2">

      <title>La 1&ordf; Campa&ntilde;a Mundial de Seguridad en la Red ayuda a luchar contra el spam</title>

      <link>http://localhost/blog/?op=leer&amp;entrada=2</link>

      <description>

         El spam o correo electr&oacute;nico se ha convertido es una de las m&aacute;s temibles amenazas de Internet. La proliferaci&oacute;n de mensajes publicitando todo tipo de art&iacute;culos ha llegado a tal extremo que, en este momento, suponen el 25% de la totalidad de los e-mails que se encuentran en circulaci&oacute;n.

      </description>

	  <pubDate>12/8/2004</pubDate> 



   </item>
</rdf:RDF>
En que estoy fallando o que debo hacer?

Ah por cierto al guardar las entradas las limpio asi
Código PHP:
$intro strip_tags(trim($_POST['intro']));
$texto strip_tags(trim($_POST['texto']));

//y despues realizo mi consulta a la db 
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol

Última edición por Gerald; 13/08/2004 a las 16:13
  #2 (permalink)  
Antiguo 14/08/2004, 14:45
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Nadie sabe lo que esta pasando :S me explique mal?
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #3 (permalink)  
Antiguo 16/08/2004, 17:33
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Por favor muevan el Tema donde sea conveniente ,y muchas gracias .
Seguro a alguien le ha pasado lo mismo
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #4 (permalink)  
Antiguo 17/08/2004, 04:25
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 16 años, 1 mes
Puntos: 5
Dices que ese error te da cuando cargas el archivo XML que te genera el codigo PHP directamente en el navegador o cuando lo abres desde el PHP?

Has probado algo como:

<title>La 1&amp;ordf; Campa&amp;ntilde;a Mundial de Seguridad en la Red ayuda a luchar contra el spam</title>

Por probar...

Suerte!
  #5 (permalink)  
Antiguo 17/08/2004, 15:45
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Es decir

El texto que muestra el xml es el que esta guardado en la DB y al generar el xml me lo muestra tal cual esta en la DB.
Cuando intento abrir el xml por el navegador me sale ese error
The XML page cannot be displayed
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.


--------------------------------------------------------------------------------

Reference to undefined entity 'ordf'. Error processing resource 'http://localhost/blog2/index.xml'. Line 25, Position 121


<rdf:li resource="La 1&ordf; Campa&ntilde;a Mundial de Seguridad en la Red ayuda a luchar contra el spam" />


que estoy haciendo mal?
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #6 (permalink)  
Antiguo 18/08/2004, 01:29
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 16 años, 1 mes
Puntos: 5
Pero has probado lo que te dije?
  #7 (permalink)  
Antiguo 18/08/2004, 14:46
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Si si lo hice, y me sigue saliendo el mismo error?
Que debo hacer
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #8 (permalink)  
Antiguo 11/09/2004, 07:51
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Pues mira tu

Gerald:
He cogido tu código y le he realizado algunas modificaciones. Me ha quedado de esta forma:
Código PHP:
function PHPToRSS($filename,$tituloweb){
  $filename = strtolower(str_replace(' ', '', index)) . '.xml';
  if (file_exists($filename)) {
   @unlink($filename);
  }
  session_start();
  $sid = "&jcgrmsid=".session_id();
  $handler      = fopen($filename,'w+');
  $query        = "SELECT *,DAYOFMONTH(fecha_publicacion) as dia, DAYOFWEEK(fecha_publicacion) as semana, MONTH(fecha_publicacion) as mes, YEAR(fecha_publicacion) as year, DATE_FORMAT(fecha_publicacion,'%h:%i %p') as hora FROM jcgrm_noticias WHERE activa<>0 GROUP BY idcat";
  $result       = mysql_query($query) or die(mysql_error());
  $rssfile      = "<?xml version="1.0\" encoding=\"UTF-8\"?>";
    while(
$row mysql_fetch_assoc($result)){
     
$idnoticia $row['idnoticia'];
     
$titulo    $row['titulo'];
     
$resumen   nl2br($row['resumen']);
     
$fecha     UltimoMensaje($row['dia'],$row['semana'],$row['mes'],$row['year'],$row['hora'],$row['autor'],1);
     
// Sacamos el titulo de la categoria correspondiente
     
$querycat  "SELECT * FROM jcgrm_categorias_noticias WHERE idcat=".$row['idcat']."";
     
$resultcat mysql_query($querycat) or die(mysql_error());
     
$rowcat    mysql_fetch_assoc($resultcat);

     
$rssfile.= "<categoria>".$rowcat['titulo']."";
     
$rssfile.= " <noticia>";
     
$rssfile.= "  <titulo>".$titulo."</titulo>";
     
$rssfile.= "  <resumen>".$resumen."</resumen>";
     
$rssfile.= "  <publicado>".$fecha."</publicado>";
     
$rssfile.= "  <url>noticias.php?accion=mostrar&categoria=".$row['idcat']."&noticia=".$row['idnoticia']."".$sid."</url>";
     
$rssfile.= " </noticia>";
     
$rssfile.= "</categoria>";
  }
  if(!
fputs($handler$rssfile))
  {
    echo 
"no se pudo crear el Rss";
  }
  
fclose($handler);
}
pero cuando intento abrir el fichero XML me da este error:
Código HTML:
No se puede mostrar la página XML 
No se puede ver la entrada XML con la hoja de estilo XSL. Corrija el error y haga clic en el botón Actualizar, o inténtelo de nuevo más tarde. 
--------------------------------------------------------------------------------
Se encontró un carácter no válido en el contenido del texto. Error al procesar el recurso [url]http://inter/noticias.xml[/url]. Línea...
<?xml version="1.0" encoding="UTF-8"?><categoria>BlackHats <noticia> <titulo>sdasdasd</titulo>...
y el XML generado es este:
Código HTML:
<?xml version="1.0" encoding="UTF-8"?><categoria>BlackHats <noticia> <titulo>sdasdasd</titulo> <resumen>asdsdfsdf</resumen> <publicado>Sࡡdo30, Diciembre de 1899 | 12:00 AM Por: sdf</publicado> <url>noticias.php?accion=mostrar&categoria=1&noticia=1&jcgrmsid=5dae04cac8a0dd9d978bdc7c10016bb5</url> </noticia></categoria> 
alguien me da una mano en porque este error.

Salu2
__________________
Ing. Reynier Pérez Mira
  #9 (permalink)  
Antiguo 11/09/2004, 08:02
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Pues ya

Me he dado cuenta del error pero no se como voy a resolverlo. A mi parecer lo que veo es que XML no interpreta las URL de esta forma:
Código HTML:
noticias.php?accion=mostrar&categoria=1&noticia=1&jcgrmsid=e7ad7bea3d3c528811ca1eeff87c5663
entonces probe a ponerlo de esta forma:
Código HTML:
noticias.php?accion=mostrar&amp;categoria=1&amp;noticia=1&jcgrmsid=e7ad7bea3d3c528811ca1eeff87c5663
pero nada tampoco. Me dan alguna ideita para resolver este asuntico.?
Salu2
__________________
Ing. Reynier Pérez Mira
  #10 (permalink)  
Antiguo 11/09/2004, 14:52
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
es español?
encoding="iso-8859-1"?>

porque usas :
encoding="UTF-8"?>
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #11 (permalink)  
Antiguo 11/09/2004, 15:21
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Pues mira

He probado y me da el mismo error. Que puede ser
Salu2
__________________
Ing. Reynier Pérez Mira
  #12 (permalink)  
Antiguo 13/09/2004, 02:00
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 16 años, 1 mes
Puntos: 5
Lo primero es que se te escapó un & después de "noticia=1"

noticias.php?accion=mostrar&amp;categoria=1&amp;noticia=1&jcgrmsid=e7ad7bea3d3c528811ca1eeff87c566 3
Habeis probado en usar las funciones urlencode() de php?
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 08:49.