Comunidad de diseño web y desarrollo en internet online

Problema Filtrado

Citar            
MensajeEscrito el 23 Ene 2009 02:59 pm
Estimada comunidad :D ... tengo un super problema que me tiene loco hacen dias :( ... me explico


Código :

<test>
   <niveles_test nombre="Nivel test 1">
         <niveles>
            <nivel>1º nivel</nivel>
            <nivel>2º nivel</nivel>
            <nivel>3º nivel</nivel>
         </niveles>
   </niveles_test>
   <niveles_test nombre="Nivel test 2">
         <niveles>
            <nivel>4º nivel</nivel>
            <nivel>3º nivel</nivel>
            <nivel>1º nivel</nivel>
         </niveles>
   </niveles_test>
</test>


Tengo un xml muy parecido a este... la cosa es que necesito realizar una busqueda de que nodos contienen un cierto nivel... me explico si filtro por "4º nivel" deberia devolverme solo esto...

Código :

<niveles_test nombre="Nivel test 2">
         <niveles>
            <nivel>4º nivel</nivel>
            <nivel>3º nivel</nivel>
            <nivel>1º nivel</nivel>
         </niveles>
</niveles_test>


Ahora si busco por "1º nivel" me tendria que devolver en este caso el xml completo, porque ambos contienen el nivel "1º nivel"...

E buscado y rebuscado por la web como realizar esto en FLEX, pero no he logrado conseguirlo :(

Les agradeceria mucho alguna guia de como poder hacerlo...

Saludos y gracias

Por Pbax

12 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 Ene 2009 03:38 pm
Leyendo el post de kirupa creo que debería ser algo como

Código ActionScript :

var  xmlFiltrado:XMLList  =  miXML.niveles.(nivel==  "4º nivel");

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Ene 2009 03:40 pm
aqui ahy otra pagina donde explica todo eso
espero q te sirva
saludos

[url=http://www.adobe.com/devnet/flex/quickstart/accessing_xml_data/]

Por anikilatorbeta

42 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Ene 2009 03:42 pm
ya lo intente.. y no resulta... solo resulta lo que tu buscas si esta solito onda...


Código :

<niveles_test nombre="Nivel test 2">
         <niveles>
            <nivel>4º nivel</nivel>
         </niveles>
</niveles_test>



Pero nose porque no recorre los demas hijos...


Gracias

Por Pbax

12 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 Ene 2009 03:55 pm
@ anikilatorbeta

Vale gracias por su respuesta, pero lamentablemente la mayoria de los ejemplos en esa pagina apuntan a un xml ordenado de la sgte manera:

Código :

<test>
   <niveles_test nombre="Nivel test 1">
         <niveles>
            <nivel>1º nivel</nivel>
         </niveles>
   </niveles_test>
   <niveles_test nombre="Nivel test 2">
         <niveles>
            <nivel>4º nivel</nivel>
         </niveles>
   </niveles_test>
</test>


El problema se presenta al repetir el tag, cuando se repite no busca en los demas... solo en el primero... y yo necesito que el filtrado busque las comparaciones en todos los "nivel" que contenga el nodo. :(


Les agradesco a los que me han respondido anteriormente

Se esperan con ganas cualquier ayudita que puedan brindad :D

Salu2 a todos

Por Pbax

12 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 Ene 2009 04:20 pm
aqui esta el codigo q lo hace

Código ActionScript :

         
private var xml_xml:XML=<test>
   <niveles_test nombre="Nivel test 1">
         <niveles>
            <nivel>1º nivel</nivel>
            <nivel>2º nivel</nivel>
            <nivel>3º nivel</nivel>
         </niveles>
   </niveles_test>
   <niveles_test nombre="Nivel test 2">
         <niveles>
            <nivel>4º nivel</nivel>
            <nivel>3º nivel</nivel>
            <nivel>1º nivel</nivel>
         </niveles>
   </niveles_test>
</test>;
private function init():void{
   for(var b:int=0;b<xml_xml.niveles_test.length();b++){
      for(var c:int=0;c<xml_xml.niveles_test[b].niveles.length();c++){
               if(xml_xml.niveles_test[b].niveles.nivel[c]=="4º nivel"){
         var xml_nuevo:XML=xml_xml.niveles_test[b];
      }

      }
   }

}

saludos espero q te sirva

Por anikilatorbeta

42 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Ene 2009 04:55 pm
No sé qué le ocurre al "==" en los filtrados, así que probé con hacer el filtrado como

Código ActionScript :

private function LoadXML(e:Event):void {
    xmlData = new XML(e.target.data);
    xmlData = new XML(e.target.data);
    var  xmlFiltrado:XMLList  =  xmlData.niveles_test.niveles.(nivel.toString().search("4º nivel")>0);
    trace(xmlFiltrado.toString()); // .toXMLString());
}

NOTA:Lo he puesto dentro de una función onLoad

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Ene 2009 07:37 pm
Muchas gracias a anikilatorbeta y a Eliseo2 quienes me han respondido.

Me e demorado en contestar por el hecho que estaba probando ambas soluciones. La solucion de anikilatorbeta me funciona perfectamente, tuve que agregar un parametro minimo ("nivel") :

Código :

 for(var c:int=0;c<xml_xml.niveles_test[b].niveles.nivel.length();c++){ 


Para que pudiera recorrer todos los nodos.

La segunda solución planteada a pesar que es mucho más optima no me funciono perfectamente... ya que me devuelve lo siguiente:

Código :

<niveles> 
            <nivel>4º nivel</nivel> 
            <nivel>3º nivel</nivel> 
            <nivel>1º nivel</nivel> 
</niveles> 


obviando el nodo principal " <niveles_test nombre="Nivel test 2"> " Trate de hacer las modificaciones que creia que podian ser pero no logre que me devolviera lo correcto. buscare un manual de como utilizar la funcion search y si logro encontrar algo interesante lo adjunto en este mismo post.


Muchas gracias a toda la comunidad

Por Pbax

12 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 Ene 2009 08:04 pm
yaaaa!!!


Me funco de ambas formas :D

La segunda solución entregada por Eliseo2, tuve que modificar un paramatro pequeño para que me entragara el xml completo.
A continuacion esta el codigo completito:

Código :

[Bindable]
private var xmlData:XML=<test> 
   <niveles_test nombre="Nivel test 1"> 
         <niveles> 
            <nivel>1º nivel</nivel> 
            <nivel>2º nivel</nivel> 
            <nivel>3º nivel</nivel> 
         </niveles> 
   </niveles_test> 
   <niveles_test nombre="Nivel test 2"> 
         <niveles> 
            <nivel>4º nivel</nivel> 
            <nivel>3º nivel</nivel> 
            <nivel>1º nivel</nivel> 
         </niveles> 
   </niveles_test> 
</test>; 
private function init():void { 
     var  xmlFiltrado:XMLList  =  xmlData.niveles_test.(niveles.nivel.toString().search("4º nivel")>-1); 
    trace(xmlFiltrado.toString()); // .toXMLString()); 
} 



Saludos y gracias a todos

Por Pbax

12 de clabLevel



Genero:Masculino  

firefox

 

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