Foros del Web » Programando para Internet » PHP »

Insertar "registro" en XML

Estas en el tema de Insertar "registro" en XML en el foro de PHP en Foros del Web. Hola gente, estoy intentando crear un fichero de log XML mediante PHP y estoy teniendo algun problemilla. El tema es el siguiente: supongamos que el ...
  #1 (permalink)  
Antiguo 19/02/2007, 19:32
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 2 meses
Puntos: 1
Busqueda Insertar "registro" en XML

Hola gente,
estoy intentando crear un fichero de log XML mediante PHP y estoy teniendo algun problemilla.
El tema es el siguiente: supongamos que el fichero XML "log.xml" tiene la siguiente estructura
Cita:
<?xml version="1.0" standalone="yes" ?>
<log>
<error>
<date>20-02-2007</date>
<sql>select * from dual</sql>
<description>bla bla bla</description>
</error>
</log>
Y que para insertar cada vez una línea de error utilizo el siguiente código:
Cita:
$xml= fopen("log.xml", "a+");

$content="<error>";
$content.="<date>".$date."</date>";
$content.="<sql>".$sql."</sql>";
$content.="<description>".$description."</description>";
$content.="</error>";

fwrite($xml, $content);
fclose($xml);
Pues bien, el problema es, básicamente, estructural: fwrite escribe al final de todo el archivo, pero lo que realmente quiero es que obviamente escriba el nuevo registro entre el último </error> y </log> (sinó el archivo quedaria bastante mal formado).

Así pues, ¿Debo recorrer todo el fichero en lugar de hacer fwrite desde el principio para, de esta forma, encontrar el lugar donde se escribe </log> y, así, escribir justo antes? (si el fichero llega a hacerse muy grande podría tardar bastante más, no?)

Qué solución me proponéis?
Mil gracias!!
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
  #2 (permalink)  
Antiguo 19/02/2007, 20:32
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Insertar "registro" en XML

Yo no te recomiendo que trabajes de esa manera. Busca alguna clase para manejar XML's, tratar de lidear con ellos directamente como lo quieres hacer es una locura. Para trabajar con XML's tienes dos alternativas desde el punto de vista de programación, DOM y SAX. En DOM se maneja al XML como un objeto que puedes agregar elemento o sacarlos y cuando finalices guardas lo que quedo. SAX en este caso no te sirve ya que SAX es una manera de ir manipulando los datos (en realidad solo ir leyendolos - si mal no recuerdo -) a medida que vas recorriendo el XML, esto sirve para cuando es demaciado grande y no quieres cargar todo el XML en memoria.

Supongo que con lo que dije tienes como para ir a preguntarle al tio Google... cualquier duda aquí estare para tratar de ayudarte.

Saludos.

PD: No te recomiendo ninguna clase ya que no conozco alguna buena... la que utilice alguna vez no recuerdo el nombre y no la encuentro.
  #3 (permalink)  
Antiguo 19/02/2007, 20:32
Avatar de carlosmbrizuela  
Fecha de Ingreso: enero-2007
Ubicación: La Plata (Argentina)
Mensajes: 490
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: Insertar "registro" en XML

lo que debes hacer es cerrar el </log> antes de mostrar el archivo.


saludos
__________________
http://www.rollermountain.com
  #4 (permalink)  
Antiguo 19/02/2007, 20:36
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Insertar "registro" en XML

Cita:
Iniciado por carlosmbrizuela Ver Mensaje
lo que debes hacer es cerrar el </log> antes de mostrar el archivo.


saludos
Esto no sirviría de mucho ya que el XML resultante sería algo así:
Código:
<?xml version="1.0" standalone="yes" ?>
<log>

    <error>

        <date>20-02-2007</date>
        <sql>select * from dual</sql>
        <description>bla bla bla</description> 

    </error>
</log>
    <error>

        <date>26-08-2007</date>
        <sql>OTRA consulta</sql>
        <description>22222222222</description> 

    </error>
</log>
Se cerraría dos veces el elemento principal.
  #5 (permalink)  
Antiguo 20/02/2007, 23:10
Avatar de carlosmbrizuela  
Fecha de Ingreso: enero-2007
Ubicación: La Plata (Argentina)
Mensajes: 490
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: Insertar "registro" en XML

nooooooooooooo, debes cerrarlo antes de mostrar el archivo. O sea, despues de procesar todos los errores.

saludos
__________________
http://www.rollermountain.com
  #6 (permalink)  
Antiguo 21/02/2007, 04:11
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 20 años, 2 meses
Puntos: 1
Re: Insertar "registro" en XML

a qué te refieres? ejemplo?

Merci a todos! (Y a Darío especialmente)
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
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 15:46.