Foros del Web » Programando para Internet » Javascript »

Recorrer xml de gran tamaño

Estas en el tema de Recorrer xml de gran tamaño en el foro de Javascript en Foros del Web. Hola, Mi problema esta que a la hora de recorrer archivos xml muy grandes (10 megas aprox., unos 83.766 elementos). En mozilla firefox, IE 10, ...
  #1 (permalink)  
Antiguo 23/07/2013, 14:55
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 0
Recorrer xml de gran tamaño

Hola,

Mi problema esta que a la hora de recorrer archivos xml muy grandes (10 megas aprox., unos 83.766 elementos).

En mozilla firefox, IE 10, funciona todo sin ningún problema incluso con archivos más grandes (mas del doble) en chrome, opera y safari la cosa no funciona, yo recorro los archivos de la siguiente forma:

Código:
$.ajax({
	type: "GET",
	url: "archivo.xml",
	dataType: "xml",
	success: function(xml, valor)
			 {
				$(xml).find('trkpt').each(function()
										 {.... resto de código
También he probado a utilizar esto, pero es menos eficaz. En ningún navegador funciona con archivos de ese tamaño.

Código:
$.get("archivo.xml", function (xml) 
{
				$(xml).find('trkpt').each(function()
										 {... sigue el código
Hay algún modo mas eficaz de recorrer el xml?.

Gracias.
  #2 (permalink)  
Antiguo 23/07/2013, 15:10
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 12 años, 11 meses
Puntos: 343
Respuesta: Recorrer xml de gran tamaño

Quizas te convendria navegar por SAX mas que por DOM si es tan grande el XML. No se si hay librerias JS SAX, pero es una buena punta para empezar a investigar.
__________________
blog | @aijoona
  #3 (permalink)  
Antiguo 24/07/2013, 02:33
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Recorrer xml de gran tamaño

GRacias , estoy investigando sobre ello, pero mientras tanto he visto otra forma de recorrer el xml solo que en este caso no me ha funcionado.

Código:
var xml='<Pages>
          <Page Name="test">
           <controls>
              <test>this is a test.</test>
           </controls>  
          </Page>
          <page Name = "User">
           <controls>
             <name>Sunil</name>
           </controls>
          </page>
        </Pages>';


xmlDoc = $.parseXML( xml ),
    $xml = $( xmlDoc );
    $($xml).each(function(){
       alert($(this).find("Page[Name]>controls>name").text());
     });
El inconveniente que veo aquí es que yo tengo que leer un archivo no una variable cuyo contenido es el contenido del xml

Y no tengo muy claro que en:
Código:
xmlDoc = $.parseXML( xml ),
pueda ir el archivo xml como en los ejemplos anteriores.

Acabo de probar con php y no me lo puedo creer, en xml de poco contenido funciona bien, pero cuanod me pongo a recorrer un archivo de gran tamaño salta este error:
Código PHP:
Fatal errorCall to a member function children() on a non-object in /homepages/28/d407299020/htdocs/cadaruta/xmlconphp.php on line 13 
El código utilizado a sido este, que lo único que hago es sacar el nombre y el valor de los atributos de el elemento "trkpt"

Código PHP:
<?php
$xml
=simplexml_load_file("rutasprueba/alpibike.gpx");
//echo $xml->getName() . "<br>";

foreach($xml->trk->trkseg->children()->attributes() as $child)
  {
  echo 
$child->getName() . ": " $child "<br>";
  }
?>

Última edición por taoshi; 24/07/2013 a las 05:37
  #4 (permalink)  
Antiguo 24/07/2013, 10:29
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Recorrer xml de gran tamaño

Hola:

Has probado sin librerías (responseXML)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 24/07/2013, 13:48
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Recorrer xml de gran tamaño

Gracias me pondré a investigar el funcionamiento responseXML ya comentaré algo.

Última edición por taoshi; 24/07/2013 a las 14:05
  #6 (permalink)  
Antiguo 31/07/2013, 08:28
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Recorrer xml de gran tamaño

Responsexml funciona muy bien en todos los navegadores, pero ahora el inconveniente es el siguiente, los archivos que tengo que leer son de extensión .GPX

Los cuales parece ser que no lee, hay alguna forma de hacer que response xml lea archivos de dicha extensión?

Este es el código que utilizo.
Código:
<script>
function loadXMLDoc()
{
var xmlhttp;
var txt,x,i,j;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    xmlDoc=xmlhttp.responseXML;
    txt="";
    x=xmlDoc.getElementsByTagName("trkpt");
	document.getElementById("coordenadas").value=x.length;
    for (i=0;i<x.length;i++)
      {
      txt=txt + x[i].getAttribute('lat') + "<br>";
	  txt=txt + x[i].getAttribute('lon') + "<br>";
      }
    document.getElementById("myDiv").innerHTML=txt;
    }
  }
xmlhttp.open("GET","rutasprueba/course.gpx",true);
xmlhttp.send();
}
</script>
Gracias.
  #7 (permalink)  
Antiguo 31/07/2013, 10:26
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Recorrer xml de gran tamaño

Hola:

Si el documento está bien formado, debería leerse sin problemas; ¿has probado cambiando la extensión?, o algún validador xml...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 01/08/2013, 03:14
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Recorrer xml de gran tamaño

Si, Cambiar la extensión es lo que hice en primer lugar antes de probar con la propia extensión (gpx) para evitar problemas y cambiar el código sin que en realidad lo necesitase, ahora al querer probar con su extensión original (gpx) es cuando no funciona, en cuando a lo de bien formados, son archivos que no creo yo ni nadie, son generados por aplicaciones con su dtd y todo en orden.
  #9 (permalink)  
Antiguo 01/08/2013, 19:01
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Recorrer xml de gran tamaño

Hola:

Cita:
Iniciado por taoshi Ver Mensaje
Si, Cambiar la extensión es lo que hice en primer lugar antes de probar con la propia extensión (gpx) para evitar problemas y cambiar el código sin que en realidad lo necesitase, ahora al querer probar con su extensión original (gpx) es cuando no funciona, en cuando a lo de bien formados, son archivos que no creo yo ni nadie, son generados por aplicaciones con su dtd y todo en orden.
Es posible que el fichero xml esté bien formado, pero tal vez no lo hayas leído bien... hay muchas formas de encontrarse con algún error que abortan la lectura (nodos vacíos o hijos inexistentes entre otras posibilidades...)

Tal vez si incrustas algún fichero pequeño que falle, podríamos ver si hay problemas... pero tengo experiencia con casos como feeds o imágenes svg, y la lectura funciona...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #10 (permalink)  
Antiguo 01/08/2013, 20:03
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Recorrer xml de gran tamaño

¡buenas gentes!

he leido y releido el tema y aún no me queda claro si el tema es problema de rendimiento o simplemente que en algunos navegadores va y en otros no. si el tema es por funcionamiento, ¿no sería más fácil si nos indicas el error (si alguno) que se reporta en la consola? +1 al comentario de @caricatos, muéstranos un extracto del xml. o si tienes una url donde se pueda realizar las pruebas.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #11 (permalink)  
Antiguo 02/08/2013, 02:54
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Recorrer xml de gran tamaño

He cambiado la extension de los archivos a .gpx (la original, la que no funciona) y he mirando en la consola me me sale este error



Explicármelo, por que no lo entiendo el archivo es el mismo el contenido es el mismo solo cambio la extensión.


Código:
<?xml version="1.0" encoding="UTF-8"?>
<gpx creator="Wikiloc - http://www.wikiloc.com" version="1.1" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
  <trk>
    <name>Tenerife - Ascensión al Teide desde Montaña Blanca</name>
    <cmt>La subida hasta la cumbre del Teide se puede hacer desde Montaña...</desc>
    <trkseg>
      <trkpt lat="28.259427" lon="-16.603178">
        <ele>2369.0</ele>
        <time>2012-05-08T22:43:17Z</time>
      </trkpt>
      <trkpt lat="28.259427" lon="-16.603186">
        <ele>2369.8</ele>
        <time>2012-05-08T22:43:57Z</time>
      </trkpt>
      <trkpt lat="28.259432" lon="-16.603197">
        <ele>2370.2</ele>
        <time>2012-05-08T22:44:37Z</time>
      </trkpt>
      <trkpt lat="28.259438" lon="-16.603203">
        <ele>2370.5</ele>
        <time>2012-05-08T22:45:17Z</time>
      </trkpt>
      <trkpt lat="28.259417" lon="-16.603193">
        <ele>2370.9</ele>
        <time>2012-05-08T22:45:57Z</time>
      </trkpt>

...........y así hasta 252711 elementos.......
</trk>
  #12 (permalink)  
Antiguo 02/08/2013, 07:07
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Recorrer xml de gran tamaño

lo que te dice la consola es bastante claro. te está diciendo que no puedes invocar el método getElementsByTagName desde un null. el null lo recibes en la propiedad responseXML porque tu servidor no detecta que el archivo .GPX es un xml. tienes que configurar tu servidor para que los archivos .GPX lo envie con el header Content-Type: text/xml y así el navegador poder interpretar el documento. por cierto, el extracto que has mostrado no es un XML válido. le falta cerrar el elemento root y otros más.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #13 (permalink)  
Antiguo 02/08/2013, 09:07
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Recorrer xml de gran tamaño

Cita:
Iniciado por zerokilled Ver Mensaje
lo que te dice la consola es bastante claro. te está diciendo que no puedes invocar el método getElementsByTagName desde un null. el null lo recibes en la propiedad responseXML porque tu servidor no detecta que el archivo .GPX es un xml. tienes que configurar tu servidor para que los archivos .GPX lo envie con el header Content-Type: text/xml y así el navegador poder interpretar el documento. por cierto, el extracto que has mostrado no es un XML válido. le falta cerrar el elemento root y otros más.
Bien, y como hago que mi servidor detecte los archivos gpx?

y el archivo esta valido 100%, no lo he pegado entero pero si quieres lo hago.
  #14 (permalink)  
Antiguo 02/08/2013, 09:26
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Recorrer xml de gran tamaño

Cita:
Iniciado por taoshi Ver Mensaje
y el archivo esta valido 100%, no lo he pegado entero pero si quieres lo hago.
¡no, no lo hagas! aunque FDW tampoco te lo permite por su tamaño, igual un extracto demasiado largo queda muy feo. sobre la configuración, ya eso depende de cada servidor (es un área que no toco). pero tienes varias opciones, puedes configurar el servidor http, o si tienes un lenguaje servidor puedes leer el archivo e iniciar el header. por ejemplo, en php es algo así:
filename.php
Código PHP:
<?php 
header
('Content-Type: text/xml');
echo 
file_get_contents('filename.gpx');
?>
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #15 (permalink)  
Antiguo 02/08/2013, 13:54
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Recorrer xml de gran tamaño

Probaré lo que me comentas pero antes, voy a ver la posibilidad de cambiar la extensión de los archivos.
  #16 (permalink)  
Antiguo 04/08/2013, 14:39
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Recorrer xml de gran tamaño

Cita:
Iniciado por zerokilled Ver Mensaje
¡no, no lo hagas! aunque FDW tampoco te lo permite por su tamaño, igual un extracto demasiado largo queda muy feo. sobre la configuración, ya eso depende de cada servidor (es un área que no toco). pero tienes varias opciones, puedes configurar el servidor http, o si tienes un lenguaje servidor puedes leer el archivo e iniciar el header. por ejemplo, en php es algo así:
filename.php
Código PHP:
<?php 
header
('Content-Type: text/xml');
echo 
file_get_contents('filename.gpx');
?>

He estado leyendo sobre lo de iniciar el header, y no me queda muy claro para que sirve y en que me puede ayudar, y no se muy bien como utilizarlo y si hace que los archivos con extensión gpx los reconozca el navegador responsexml o quien o que, si necesitas que pegue algún trozo de código me lo decis.

Estoy mas perdido que un sordo en un tiroteo.

Etiquetas: ajax, funcion, tamaño, xml
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:02.