Comunidad de diseño web y desarrollo en internet online

Tamaño máximo de un xml

Citar            
MensajeEscrito el 10 Ene 2012 01:48 pm
Hola.

Me gustaría saber si existe alguna limitación a la hora de leer un archivo xml desde as3. No sé cuál es el límite: de caracteres, de elementos, de líneas, etc., el caso es que cuando empecé a montarlo podía leerlo y ahora que tengo más entradas, no. Estoy hablando de 300 elementos y un total de 4579 líneas en las cuales se definen etiquetas asociadas.

Un saludo y gracias por anticipado.

Por maxchufa

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Ene 2012 04:24 pm
Para carga masiva de datos, XML es el peor formato, ya que es el mas verbose de todos. No hay un límite específico, porque eso depende de la memoria RAM y la velocidad de procesador del cliente (algunas se atragantaran antes, otras ni siquiera), pero te diría que pienses en métodos de carga alternativos, por ejemplo desde BD o usando Remoting, aquí tienes un pequeño listado de las opciones: http://www.flash-db.com/Tutorials/loadingAS3/

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Ene 2012 05:06 pm
Gracias por la respuesta. Le echaré un vistazo al listado.

Un saludo.

Por maxchufa

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Ene 2012 06:48 pm
Creo que ya sé cuál es el problema... He ido a publicar el proyecto parea ver si me daba un error y claro, me ha salido el error #1502.

El proceso dura demasiado ya que compara una por una las etiquetas de la base de datos del xml, con las que ya he ido eligiendo y metiendo en un DataProvider temporal que me sirve para al final llenar un List.

Aquí os lo explico más o menos:

Esta es la estructura del xml:

Código XML :

<elementos>
  <elemento label="Un itinerario accesible hasta la entrada principal del edificio">
    <tag label="accesible"/>
    <tag label="itinerario"/>
    <tag label="entrada"/>
  </elemento>
  <elemento label="Un itinerario accesible hasta la zona privativa de cada vivienda">
    <tag label="accesible"/>
    <tag label="itinerario"/>
    <tag label="zona"/>
  </elemento>
<elementos>


El código del as3 es el siguiente:

Código ActionScript :

function refreshCatList():void
   {
   var tmpDataProvider : DataProvider = new DataProvider();
  
     for (var i:int = 0; i < xmlData.elemento.length(); i++)
      {
      for (var j:int = 0; j < xmlData.elemento[i].tag.length(); j++)
         {
         var found : Boolean = false;
         for (var k:int =0; k < tmpDataProvider.length; k++)
            {
              if (tmpDataProvider.getItemAt(k).label == xmlData.elemento[i].tag[j].@label)
                {
               found = true;
                }
            }
         if (found == false)
            {
            tmpDataProvider.addItem({label:xmlData.elemento[i].tag[j].@label});
            }
           }
      }
   tmpDataProvider.sortOn("label");
   catList.dataProvider = tmpDataProvider;
   }


Está claro que el proceso no es del todo eficiente, por no decir totalmente ineficiente :cry:

Pues nada, intentaté buscar otra manera de plantearlo y por supuesto, si mientras tanto a alguien se le ocurre una manera mejor de hacerlo, pues eso, que le estaré eternamente agradecido.

Un saludo.

Por maxchufa

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Ene 2012 07:11 pm
No se que tipo de filtro es, pero seguramente con un query de la base de datos lo filtras y lo cargas directamente

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Ene 2012 08:07 pm
Seguiremos investigando. Por ahora lo que he hecho es subirle es límite de tiempo del scrip en las opciones de publicación y aunque tarde más de la cuenta, al final lo carga. Otra cosa es que cuando la base de datos sea mayor, entonces sí que será totalemente imposible. Tendré que crear otro xml independiente con solo las etiquetas.

Tendré que hacer un preloader para distraer durante la carga :P

Un saludo Jorge

Por maxchufa

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Ene 2012 10:19 pm
Es la forma mad ineficiente ... Pero como prefieras

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

safari
Citar            
MensajeEscrito el 11 Ene 2012 10:37 am
¡Por fin! :D

He encontrado una solución que funciona bien cargando el xml y sin tener que pasar por el bucle infinito del código que tenía antes.

Código ActionScript :

function refreshCatList():void
   {
   var tmpDataProvider : DataProvider = new DataProvider();//Creo un DataProvider temporal
     for (var i:int = 0; i < xmlData.elemento.length(); i++)//Contador desde 0 al número total de elementos del xml
      {
      for (var j:int = 0; j < xmlData.elemento[i].tag.length(); j++)//Contador desde 0 hasta el número total de etiquetas del elemento leído
         {
         tmpDataProvider.addItem({label:xmlData.elemento[i].tag[j].@label});//Añado las etiquetas del elemento leído al DataProvider temporal
           }
      }
   tmpDataProvider.sortOn("label");//Ordeno alfabéticamente el DataProvider temporal
   var etiquetasTempDataProvider:int = tmpDataProvider.length;//Variable con el número total de etiquetas del tmpDataProvider
   var tmpTmpDataProvider : DataProvider = new DataProvider();//Creo un nuevo DataProvider temporal
   for(var s:int=etiquetasTempDataProvider-1; s>0; s--)// Hago un contador de abajo hacia arriba del total de etiquetas ya cargadas
      {
      if(tmpDataProvider.getItemAt(s).label!=tmpDataProvider.getItemAt(s-1).label)//Miro de abajo hacia arriba si la etiqueta posterior es diferente a la anterior
         {
      tmpTmpDataProvider.addItem({label:tmpDataProvider.getItemAt(s).label});//Si se cumple la condición, añado la etiqueta al nuevo DataProvider temporal
         }
      }
   tmpTmpDataProvider.sortOn("label");//Ordeno alfabéticamente el segundo DataProvider temporal
   catList.dataProvider = tmpTmpDataProvider;//Añado los datos del segundo DataProvider temporal al List de nombre catList
}


Ahora el tiempo de espera es más que aceptable.

Gracias por la ayuda Jorge.

Por maxchufa

9 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.