Comunidad de diseño web y desarrollo en internet online

acomodar texto

Citar            
MensajeEscrito el 23 May 2010 12:33 am
buenas, como anda la comunidad???

hoy traigo un problemita con la posibilidad de acomodar texto.

Resulta que estoy haciendo una busqueda en anchura, cargando un archivo xml y pasandole un texto.

Lo que hace es partir del nodo superior, va recorriendo cada nivel comparando si la cadena de texto pasada coincide con algun nodo...sino coincide va mostrando por donde va pasando hasta que lo encuntra.

La idea es que sea un arbol, por lo que use un xml para crear la base de conocimiento y de esa forma se mas simple la busqueda.

Resulta que el codigo funciona perfectamente, sin embargo, no puedo hacer que los nodos hijos ("titulos") queden acomodados de tal forma que cada uno haga referencia a su padre y se posicione horzintalmente.

el codigo es:

Código ActionScript :

import flash.text.TextField;
var xml:XML =
<biblioteca>
<libros>
   <libro>
      <autor nombre="Paulo Coelho">
         <!--<nombre>Paulo Coelho</nombre>-->
         <titulo>El Alquimista</titulo>
         <titulo>Maktub II</titulo>
         <titulo>Manual del guerrero de la luz</titulo>
      </autor>
   </libro>
   <libro>
      <autor nombre="Jorge Luis Borges">         <!--<nombre>Paulo Coelho</nombre>-->
         <titulo>Historia universal de la infamia</titulo>
         <titulo>La muerte y la brújula</titulo>
         <titulo>El informe Brodie</titulo>
      </autor>
   </libro>
   <libro>
      <autor nombre="Julio Cortazar">
         <!--<nombre>Paulo Coelho</nombre>-->
         <titulo>Los limpiadores de estrellas</titulo>
         <titulo>La tarea de ablandar el ladrillo</titulo>
         <titulo>Instrucciones para llorar</titulo>
      </autor>
   </libro>
</libros>
</biblioteca>
/*--------------------------------------------------------------*/
var raiz:TextField = new TextField();
var nodoPadre:TextField;
var nodoHijo:TextField;
            
var cadena:String="Instrucciones para llorar"; //CADENA QUE TIENE QUE ENCONTRAR

var ul:XMLList= xml.children();


busquedaNodoPadre();
function busquedaNodoPadre():void
{

   if(cadena=="Libros")
   {
      crearRaiz();
   }
   else
   {
      crearRaiz();
      for (var i:uint=0; i<ul.libro.length(); i++)
      {
               
         if (buscarCoincidencia(xml.children().children().children()[i][email protected]())==true)
         {
            trace (xml.children().children().children()[i][email protected]());
            trace ("CORRECTO");
            
            nodoPadre = new TextField();
            nodoPadre.text=xml.children().children().children()[i][email protected]();
            addChild(nodoPadre);
            nodoPadre.width = 100;
            nodoPadre.height = 20;
            nodoPadre.x =raiz.x-200+180*i;
            //stage.stageWidth/ul.libro.length();
            nodoPadre.y =raiz.y+50;
            nodoPadre.border = true;
            nodoPadre.selectable = false;            
            break;
            
            
            
         }
         else
         {
            trace("INCORRECTO");
            nodoPadre = new TextField();
            nodoPadre.text=xml.children().children().children()[i][email protected]();
            addChild(nodoPadre);
            nodoPadre.width = 100;
            nodoPadre.height = 20;
            nodoPadre.x =raiz.x-200+180*i;
            //stage.stageWidth/ul.libro.length();
            nodoPadre.y =raiz.y+50;
            nodoPadre.border = false;
            nodoPadre.selectable = false;            
            
            if(ul.libro.length()-1==i)
            {
               trace("FINAL DE LA FILA");
               busquedaNodoHijo();
               
            }
         }
      }
   }
}

function buscarCoincidencia(dato:String):Boolean
{
   if (cadena==dato)
   {
      return true;
   }
   else
   {
      return false
   }   
}



function busquedaNodoHijo():void
{
   var correcto:Boolean=false;
   //for (var i:uint=0; i<ul.libro.autor.length(); i++)
   for (var i:uint=0; (i<ul.libro.autor.length()) && (!correcto); i++)
      {
            

      for(var k:uint=0; k<ul.libro.autor[i].titulo.length(); k++)      

         if (buscarCoincidencia(xml.children().children().children()[i].children()[k].toString())==true)
         {

            trace (xml.children().children().children()[i].children()[k].toString());
            trace ("CORRECTOOOOOOOOOOOOOooooo");
            correcto=true;

            
            nodoHijo = new TextField();
            nodoHijo.text=xml.children().children().children()[i].children()[k].toString();
            addChild(nodoHijo);
            nodoHijo.width = 100;
            nodoHijo.height = 20;
            nodoHijo.x =10+150*k;
            //stage.stageWidth/ul.libro.length();
            nodoHijo.y =nodoPadre.y+50;
            nodoHijo.border = true;
            nodoHijo.selectable = false;            
            break;
            
            
         }
         else
         {
            trace("INCORRECTO");
            
            nodoHijo = new TextField();
            nodoHijo.text=xml.children().children().children()[i].children()[k].toString();
            addChild(nodoHijo);
            nodoHijo.width = 100;
            nodoHijo.height = 20;
            nodoHijo.x =10+300*k;
            //stage.stageWidth/ul.libro.length();
            nodoHijo.y =nodoPadre.y+50;
            nodoHijo.border = false;
            nodoHijo.selectable = false;      
            
            
            
            if(ul.libro.autor[i].titulo.length()-1==i)
            {
               trace("FINAL DEL RECORRIDO; SIN COINCIDENCIAS");               
            }
         }
      }
   }

function crearRaiz():void
{
   trace("LIBROS");
   raiz.text="Libros";
   addChild(raiz);
   //raiz.width = 250;
   raiz.x =stage.stageWidth/2;
   raiz.y =10;
   raiz.border = false;
   raiz.selectable =false;
}


cuestión que ahora los textos quedan amontonados y no se ven, por lo que si pueden ayudarme se los agradecería.

desde ya gracias.
Saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

chrome
Citar            
MensajeEscrito el 24 May 2010 05:44 am
Tal vez no entiendo bien tu problema, pero no seria mas facil con un evento que se distribulla cuando encuentre la cadena?

Opino que con un for recorres todo el XML comparando.
Cuando se encuentre la coincidencia distribulle un evento.
En este evento traeras como argumentos la posicion del elemento dentro del XML.
Con esos argumentos te recorres al padre... lo guardas y listo.

Pero digo tal vez no entendi tu problema.

Suerte ^_^

Por Gz.Francisco

378 de clabLevel



Genero:Masculino  

Programador economista y buzo

firefox
Citar            
MensajeEscrito el 24 May 2010 01:39 pm
hola, Gz. Francisco...la verdad que podria funcionar..pero no me doy cuenta cono hacerlo correctamente...si puedes hehcarme una linea y de ahi arrancar te lo agradeceria.
saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

chrome

 

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