Foros del Web » Programando para Internet » PHP »

Reescribir xml

Estas en el tema de Reescribir xml en el foro de PHP en Foros del Web. Hola a todos y gracias desde ya. Como siempre que hago una pregunta en el foro de PHP no se sé si es una pregunta ...
  #1 (permalink)  
Antiguo 08/05/2007, 13:01
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 18 años, 1 mes
Puntos: 12
Reescribir xml

Hola a todos y gracias desde ya. Como siempre que hago una pregunta en el foro de PHP no se sé si es una pregunta tonta, de todas manreas ahí va:

¿Es posible reescribir sobre un fichero xml via PHP? Sería un xml sencillo en el que lo único que habría que variar es la cantidad (el número).
<ciudad>
<cantidad>3</cantidad>
<nombre>xxxxxx<nombre>
</ciudad>

Gracias
  #2 (permalink)  
Antiguo 08/05/2007, 16:17
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Reescribir xml

Con PHP podés escribir cualquier clase de archivo, en particular los xml.
Hay extensiones para manejar XML de manera sencilla, por ejemplo DOMXML o DOM.

Buscá en el manual, "funciones domxml".


Saludos.
  #3 (permalink)  
Antiguo 08/05/2007, 23:58
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 18 años, 1 mes
Puntos: 12
Re: Reescribir xml

Mil gracias, le echaré un vistazo.
  #4 (permalink)  
Antiguo 09/05/2007, 03:28
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 18 años, 1 mes
Puntos: 12
Re: Reescribir xml

Hola otra vez, he mirado numerosos sitios y sólo he encontrado las funciones obsoletas y las nuevas y un ejemplo. El problema es que no me entero. He encontrado una funcion que abre el xml y lo lee:

//$ruta_fichero="http://www.dominio.com/noticias.xml";
$ruta_fichero="noticias.xml";

$contenido = "";
if($da = fopen($ruta_fichero,"r"))
{
while ($aux= fgets($da,1024))
{
$contenido.=$aux;
}
fclose($da);
}
else
{
echo "Error: no se ha podido leer el archivo <strong>$ruta_fichero</strong>";
}


Lo que quiero hacer y no he podido es hacer que el php lo abra y sume uno a la cantidad cada vez que ocurre la rutina. Alguna idea?


GRACIAS
  #5 (permalink)  
Antiguo 10/05/2007, 08:23
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Reescribir xml

Pues yo lo haría así:
Código PHP:
<?php
$archivo 
file_get_contents("nombredelarchivo");
ereg("<cantidad>([0-9]*)</cantidad>"$archivo$numero);
//Aquí te queda en $numero[1] el número almacenado (creo ;-))
//Ahora lo cambiás:
$numero[1]++;
ereg_replace("<cantidad>([0-9]*)</cantidad>""<cantidad>".$numero[1]."</cantidad>"$archivo);

//y por último lo escribís
$arch fopen("nombredearchivo, 'w+');
fopen($arch, $archivo);
fclose($arch);

?>
Claro que antes de poner este código a funcionar, probalo


Saludos.
  #6 (permalink)  
Antiguo 10/05/2007, 09:29
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 18 años, 1 mes
Puntos: 12
Re: Reescribir xml

Tío funcione o no, te has ganado un puesto en el paraíso. Era para una web para regalar y me viene de perlas. Si algún día tienes alguna duda de Flash (si vale, flash..) no dudes en pedírmelo.

Muchas gracias por todo!
  #7 (permalink)  
Antiguo 10/05/2007, 10:20
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 18 años, 1 mes
Puntos: 12
Re: Reescribir xml

Hola una vez más, ya me da vergüenza seguir incordiando pero no ha funcionado. Falla en la línea 11:

<?php
$archivo = file_get_contents("imagenes.xml");
ereg("<cantidad>([0-9]*)</cantidad>", $archivo, $numero);
//Aquí te queda en $numero[1] el número almacenado (creo )
//Ahora lo cambiás:
$numero[1]++;
ereg_replace("<cantidad>([0-9]*)</cantidad>", "<cantidad>".$numero[1]."</cantidad>", $archivo);

//y por último lo escribís
$arch = fopen("imagenes.xml, 'w+');
fopen($arch, $archivo);
fclose($arch);

?>

Es la que pone $arch = fopen("imagenes.xml, 'w+'); - Le he puesto comillas combinando el sitio y nada, simplemente cambia el tipo de error.

Poniéndole las comillas que cierran, que me ha parecido lo más natural me sale el siguiente error:

fopen() expects parameter 1 to be string, resource given in ... line 11

Por mi parte he mirado fclose por la red y no me aclara gran cosa pues parece que está bien...

gracias
  #8 (permalink)  
Antiguo 10/05/2007, 10:54
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Reescribir xml

me equivoqué jejeje por no revisar...
hay 2 errores en mi código:
1.- en la línea 11, efectivamente hay que cerrar las comillas alrededor del nombre.
2.- en la línea 12, no es fopen($arch, $archivo) sino fwrite($arch, $archivo)


Esos son los errores que marca.


Saludos.
  #9 (permalink)  
Antiguo 11/05/2007, 05:59
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 18 años, 1 mes
Puntos: 12
Re: Reescribir xml

Gracias una vez más y lo siento una vez más. He probado el script con las modificaciones y sigue sin funcionar, el caso es que he puesto un echo al final con las variables $numero[1] devuelve el valor + 1, es decir que va bien el tema. $archivo me devuelve : 29 :: WC - ART ::, es decir la cifra actual y el título. He probado a ver si sonaba la flauta cambiar el ereg_replace sólo con cifras:

ereg_replace($numero[1],$numero[1]++,$archivo);

Tampoco va. No sé, estoy desesperado. ¿Alguna solución de estas que te sacas de la manga?

GRACIAS (de nuevo)
  #10 (permalink)  
Antiguo 11/05/2007, 18:18
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Reescribir xml

No entiendo, ¿cuál es el problema? decís que tanto $numero como $archivo tienen los valores correctos... ¿el formato del archivo que estás usando es diferente que el que pegaste?

En cuanto al cambio en la expresión, entra en juego la diferencia entre ++variable y variable++

++variable => incrementa variable y devuelve el valor incrementado
variable++ => devuelve el valor actual de variable y luego incrementa.

En cualquier caso, debería funcionar

ereg_replace($numero[1],++$numero[1],$archivo);

El problema es que eso sustituirá todas las apariciones de $numero en el archivo, incluso cualquier otra aparición diferente (es decir, si tenés $numero = 11, y por ahí anda un 112345, te lo va a cambiar también)


Saludos, y no te preocupes, si te contesto es porque me gustan los retos y no es necesario que te disculpes de nada
  #11 (permalink)  
Antiguo 12/05/2007, 03:01
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 18 años, 1 mes
Puntos: 12
Re: Reescribir xml

Hola!!, llevo toda la noche con esto, he quitado los espacios, los he vuelto a poner, me he leído 100. 000 tutoriales sobre ereg_replace, fwrite,... pero al final... en la línea

fwrite($arch,$numero[1]);

El problema era que me sustituía todo el xml por la cifra pero cogiendo la línea que me enviaste de ereg creé una nueva variable:

$vamos="<galeria><cantidad>".$numero[1]."</cantidad><titulo>:: WC - ART ::</titulo></galeria>";

A la línea fwrite($arch,$numero[1]);

se le cambia $numero por $vamos y funciona. Se ve que el tema estaba en que no me funciona el ereg (tengo una versión correcta de php el chmod está bien pero no funciona). Como el xml es tan corto no da problemas. Supongo que es una chapuza, PERO FUNCIONA oeeee!!

Eres un tío grande, sin tí esto no habría salido (ni empezado), muchas gracias. Si encuentras el fallo del ereg envíame la solución. En cuanto tenga otro reto te lo mando.

Gracias
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 21:36.