Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Generar ficheros XML y guardar en ZIP

Estas en el tema de Generar ficheros XML y guardar en ZIP en el foro de Javascript en Foros del Web. Hola, tengo una aplicación para generar ficheros XML con datos de una tabla html. Con un bucle for recorro las filas de la tabla y ...
  #1 (permalink)  
Antiguo 24/12/2014, 13:04
 
Fecha de Ingreso: octubre-2011
Mensajes: 206
Antigüedad: 13 años
Puntos: 1
Generar ficheros XML y guardar en ZIP

Hola,

tengo una aplicación para generar ficheros XML con datos de una tabla html. Con un bucle for recorro las filas de la tabla y se van generando todos los XML. El problema es que la funcion descargararchivo abre todos los ficheros en el navegador.

Agradecería alguna ayuda para saber como puedo ir añadiendo estos ficheros en un ZIP (he leido sobre jsZIP pero no se implementarlo en este caso) y poder descargarlo solo el zip.. Les indico el codigo que recorre la table, genera el XML y descarga el archivo.

Código PHP:
//Recorrer la tabla para ir generando XML
for (var i = 0; i <filas.length ; i++) {
descargarArchivo(generarXml(datos), 'archivo.xml');
}

//Genera un objeto Blob con los datos en un archivo XML
function generarXml(datos) {
    var texto = [];
    texto.push('<?xml version="1.0" encoding="UTF-8" ?>\n');
    texto.push('<datos>\n');
    texto.push('\t<nombre>');
    texto.push(datos.nombre);
    texto.push('</nombre>\n');
    
    return new Blob(texto, {
    type: 'application/xml'
    });
};

function descargarArchivo(contenidoEnBlob, nombreArchivo) {
   var reader = new FileReader();
    reader.onload = function (event) {
        var save = document.createElement('a');
        save.href = event.target.result;
        save.target = '_blank';
        save.download = nombreArchivo || 'archivo.dat';
        var clicEvent = new MouseEvent('click', {
            'view': window,
                'bubbles': true,
                'cancelable': true
        });
        save.dispatchEvent(clicEvent);
        (window.URL || window.webkitURL).revokeObjectURL(save.href);
    };
    reader.readAsDataURL(contenidoEnBlob);
};
Muchas gracias. Un saludo
  #2 (permalink)  
Antiguo 26/12/2014, 05:32
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: Generar ficheros XML y guardar en ZIP

Si bien hay librerías javascript que permiten hacer lo que pides, como https://stuk.github.io/jszip/, yo te recomiendo que vayas a lo seguro y hagas ese trabajo en el servidor. En php podés usar, por ejemplo, esto: http://www.imaginanet.com/blog/compr...p-con-php.html
  #3 (permalink)  
Antiguo 26/12/2014, 07:19
 
Fecha de Ingreso: octubre-2011
Mensajes: 206
Antigüedad: 13 años
Puntos: 1
Respuesta: Generar ficheros XML y guardar en ZIP

Gracias. Tenía pensado usar jszip y estuve mirando pero el problema lo tengo un poco antes...como puedo obtener, si es que es posible, el fichero XML a partir del contenido en blob? Cuando solo generaba un XML lo mostraba en pantalla y lo descargaba, era perfecto peor ahora al generar varios XML es preferible descargarlo en un zip..

Supongo que en el bucle for en el que recorro la tabla tendre que añadir algo similar a esto, pero como obtengo el fichero (file.xml)??
Código PHP:
if($zip->open($filename,ZIPARCHIVE::CREATE)===true) {
$zip->addFile('file.xml');
$zip->close(); 
Un saludo
  #4 (permalink)  
Antiguo 28/12/2014, 08:39
 
Fecha de Ingreso: noviembre-2010
Mensajes: 36
Antigüedad: 14 años
Puntos: 1
Respuesta: Generar ficheros XML y guardar en ZIP

Para crear el archivo prueba con file_put_contents()

Código:
$contenido = "....";

file_put_contents("tuArchivo.xml", $contenido);
Para enzipearlo

Código:
$dst = "ruta donde hayas creado el documento anterior (el xml)";

$command = "cd ".$dst."; nice -n19 zip -r0 ./nombreFinalArchivo.zip *";
exec($command);
No es una solución muy elegante, ya que solo te funcionará sobre server apache... pero bueno, quizás te valga.

Etiquetas: ficheros, funcion, html, js, tabla, xml, zip
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 07:51.