Foros del Web » Programando para Internet » PHP »

Editar Xml con PHP

Estas en el tema de Editar Xml con PHP en el foro de PHP en Foros del Web. Buenas, el problema que tengo esque creo un xml temporal de esta manera : Código PHP: <?     if(! $usuario  &&  $artista ){          $sql  =  ...
  #1 (permalink)  
Antiguo 13/07/2008, 07:18
 
Fecha de Ingreso: enero-2008
Mensajes: 58
Antigüedad: 16 años, 3 meses
Puntos: 1
Editar Xml con PHP

Buenas, el problema que tengo esque creo un xml temporal de esta manera :

Código PHP:
<?    if(!$usuario && $artista){
        
$sql "SELECT * FROM musica WHERE artista='$artista'";
        
$result mysql_query($sql$conexion);
        
header('Content-type: text/xml; charset="iso-8859-1"'true);
        
        while (
$item mysql_fetch_assoc($result)){
            
$art "<artistas>
                         <artista>"
.$item['artista']."</artista>
                         <cancion>"
.$item['cancion']."</cancion>
                         <genero>"
.$item['genero']."</genero>
                         <ano>"
.$item['ano']."</ano>
                         <location>"
.$item['location']."</location>
                         <album>"
.$item['album']."</album>
                         <tiempo>"
.$item['tiempo']."</tiempo>
                         <duracion>"
.$item['duracion']."</duracion>
                    </artistas>"
;
        }

            if(
file_exists("tmp/xml_temporal.txt")){
                
$archivo "tmp/xml_temporal.txt";
                
$gestor fopen($archivo"a+");
                
fwrite($gestor"$art");
                
fseek($gestor0);
            } else {
                
$archivo "tmp/xml_temporal.txt";
                
$gestor fopen($archivo"a+");
                
fwrite($gestor"<?xml version='1.0' encoding='iso-8859-1'?><musica>");
                
fwrite($gestor"$art");
                
fwrite($gestor"</musica>");
                
fseek($gestor0);
            }

            echo 
fread($gestor5000);

?>
el XML se escribe correctamente, pero el problema que tengo esque se crea asi :

Código:
<?xml version='1.0' encoding='iso-8859-1'?><musica><artistas>
						 <artista>A Split Second</artista>
						 <cancion>Flesh</cancion>
						 <genero>Electronica/Dance</genero>
						 <ano>1992</ano>
						 <location> musica/2-05%20Flesh.m4a</location>
						 <album>Maquina Total 3</album>
						 <tiempo>335333</tiempo>
						 <duracion>5:35</duracion>
					</artistas></musica><artistas>
						 <artista>Zeromancer</artista>
						 <cancion>Need You Like A Drug</cancion>
						 <genero>Industrial</genero>
						 <ano>2002</ano>
						 <location> musica/03%20Need%20You%20Like%20A%20Drug.mp3</location>
						 <album>Eurotrash</album>
						 <tiempo>213133</tiempo>
						 <duracion>3:33</duracion>
					</artistas>
y necesito que "</musica>" se borre y se coloque al final del XML y no se me ocurre la manera de hacerlo y las que he probado no funcionan...

A ver si me podeis dar alguna idea!

Un saludo y gracias x adelantado!
  #2 (permalink)  
Antiguo 25/07/2008, 14:35
Avatar de lalogrosz  
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 339
Antigüedad: 21 años, 11 meses
Puntos: 6
Respuesta: Editar Xml con PHP

Hola.
El problema que tenes es obvio.
Estas guardando al final del archivo y si este ya tenia contenido, estas poniendo todo al final de </musica>

Hay varias soluciones para esto, la mas sencilla seria leer todo el archivo generado, reemplazar la etiqueta </musica> por todo lo nuevo que queres agregar y ahi al final le agregas </musica>. Luego salvas el archivo, pisando el anterior.

Despues tenes otras opciones como leer el archivo no como un archivo plano, sino parsearlo en xml y poniendo los nodos en objetos, pudiendo agregar nodos al objeto y luego salvarlo todo entero.
Acabo de buscar algo pero como estoy apurado no tuve tiempo de buscar.
Proba con la primera opcion, sino dedicale un tiempo a google a buscar un parser de xml con php.

Ojo que en el while de la consulta estas pisando los datos en cada ciclo porque no estas haciendo .= , sino que estas igualando directamente y pisando lo anterior.

Saludos!
__________________
"Vivir....solo cuesta Vida"
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 19:07.