Foros del Web » Creando para Internet » Flash y Actionscript »

Xml y Flash

Estas en el tema de Xml y Flash en el foro de Flash y Actionscript en Foros del Web. Hola a tod@s, Nunca he trabajado cargando datos desde un XML y no me sale una cosa. Os planteo mi problema por si podeis ayudar ...
  #1 (permalink)  
Antiguo 30/05/2006, 09:41
din
 
Fecha de Ingreso: marzo-2002
Mensajes: 50
Antigüedad: 22 años, 8 meses
Puntos: 0
Xml y Flash

Hola a tod@s,

Nunca he trabajado cargando datos desde un XML y no me sale una cosa. Os planteo mi problema por si podeis ayudar o referirme a algún link

Objetivo: Realizar una especie de glosario. Se dispondrá de un botón con la letra A, otro con la letra B, ... así hasta el botón con la letra Z. Cuando el usuario haga clic en A, se cargarán unicamente aquellos conceptos que comienzan por A. Todos los conceptos están en un fichero XML

Solución o pasos dados
Tengo un fichero XML con la siguiente estructura:
<
glosario>
<termino concepto="conductor">Persona que conduce un vehículo .</termino>
<termino concepto="copiloto">Persona abordo del vehículo que puede conducir en caso necesario </termino>
<termino concepto="descarga de datos">Es la copia, junto con la firma digital, de una parte o de la totalidad de los datos almacenados en la memoria del vehículo o en la memoria de una tarjeta de tacógrafo. La transferencia no podrá modificar ni borrar ninguno de los datos almacenados. </termino>
</glosario>
En Flash, he creado dos capas:
Capa con Contenido gráfico: donde tengo un moviclip formado por un botón por cada letra del abecedario y un list
Capa ActionScript con el siguiente código:
var miXML:XML = new XML();
miXML.ignoreWhite = true;
miXML.onLoad = function(ok) {
if (ok) {
var longitud:Number = this.firstChild.childNodes.length;
for (var k = 0; k<longitud; k++) {
_root.glosario.list.addItem({label:this.firstChild .childNodes[k].firstChild.nodeValue, data:this.firstChild.childNodes[k].attributes.concepto});
}
}
};
miXML.load("glosario.xml");

Problemas:
Me carga todos los conceptos en el list. ¿Cómo hago para que inicialmente no aparezca nada en el?
Cómo hago para que cuando haga clic en A, se cargue en el list únicamente los conceptos que empiezan por A ¿Esta mal estructurado el XML?
Gracias a tod@s!!!
  #2 (permalink)  
Antiguo 30/05/2006, 10:40
Avatar de julio archila  
Fecha de Ingreso: marzo-2005
Ubicación: Quetzaltenango, Guatemala
Mensajes: 272
Antigüedad: 19 años, 8 meses
Puntos: 0
Hola din:

En primer lugar si lo que queres es que el XML cargue en un momento especifico de la pelicula simplemente metelo en una funcion, por ejemplo.

Código:
function cargaDatos(){
var miXML:XML = new XML();
miXML.ignoreWhite = true;
miXML.onLoad = function(ok) {
if (ok) {
var longitud:Number = this.firstChild.childNodes.length;
for (var k = 0; k<longitud; k++) {
_root.glosario.list.addItem({label:this.firstChild .childNodes[k].firstChild.nodeValue, data:this.firstChild.childNodes[k].attributes.concepto});
}
}
};
miXML.load("glosario.xml");
}
Luego en un evento o en un boton podes llamar a la funcion para que cargue la informacion que deseas.
Código:
_root.cargaDatos();
ahora bien con lo que queres hacer, al presionar el boton "A" que aparezcan los que empiezan con "A", se me ocurren dos cosas, la primera es sencilla y es la siguiente...

Tenes que hacer un XML por cada letra, por ejemplo glosario_a.xml, glosario_b.xml, glosario_c.xml, etc... y cambias el codigo de arriba por este:

Código:
function cargaDatos(letra){
var miXML:XML = new XML();
miXML.ignoreWhite = true;
miXML.onLoad = function(ok) {
if (ok) {
var longitud:Number = this.firstChild.childNodes.length;
for (var k = 0; k<longitud; k++) {
_root.glosario.list.addItem({label:this.firstChild .childNodes[k].firstChild.nodeValue, data:this.firstChild.childNodes[k].attributes.concepto});
}
}
};
miXML.load("glosario_"+letra+".xml");
}
En el boton "A", iria de esta forma el codigo:
Código:
onClipEvent(load){
letra = a;
}
on(release){
_root.cargaDatos(letra);
}
y en cada boton, la variable letra debe cambiar, conforme a la que vamos a cargar.

Pero como te dije que se me ocurrian dos cosas, bueno la segunda es que hagas un tipo "buscador" de texto con AS y que cargues solo el contenido que deseas cargar. Este caso, mi amigo, te llevara mucho tiempo de programacion y peso en la pelicula, asi que te recomiendo que optes por la primera.

Espero te haya sido de mucha ayuda.

Salu2 ...

..::JAr::..
__________________
Julio Archila
  #3 (permalink)  
Antiguo 30/05/2006, 17:50
Avatar de luistar  
Fecha de Ingreso: marzo-2005
Ubicación: Argentina
Mensajes: 939
Antigüedad: 19 años, 8 meses
Puntos: 0
hola
usando xml tienes muchas posibilidades
como lo que dice julio archila, puedes tener los glosarios en archivos separados por letra, asi cargas lo necesario en el momento adecuado

- tmb puedes usar un solo archivo xml estructurado de mejor manera, podría ser así:
Código:
<glosario>
	<letra id="A">
		<palabra id="actionscript">definción</palabra>
		<palabra id="addEvent">definción</palabra>
	</letra>
	<letra id="B">
		<palabra id="bailar">definción</palabra>
	</letra>
	.
	.
	.
</glosario>
de esa manera solo tienes que tomar los hijos del nodo que tenga la letra dada

- una estructura como la que tú propones también sirve
lo que se puede hacer al momento de mostrar las palabras en el LIST es verificar que la primera letra cumplar con el requisito y ya

- ésto último es aún mas sencillo usando el componente: DATASET

si tu nivel de ActionScript ya no es básico, puedes comenzar con los componentes
aquí te propongo una aplicación con componentes y xml donde es más fiable hacer el filtro no sólo por la primera letra, sino por las primeras...
quiere decir que mientras vayas escribiendo algo en el campo de texto, la lista se irá filtrando

descarga

:D saludos
__________________
Si digo que soy mentiroso. ¿Lo soy?
  #4 (permalink)  
Antiguo 31/05/2006, 03:40
din
 
Fecha de Ingreso: marzo-2002
Mensajes: 50
Antigüedad: 22 años, 8 meses
Puntos: 0
Mucuas gracias!! Probare vuestros consejos
  #5 (permalink)  
Antiguo 31/05/2006, 04:09
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
Cita:
Iniciado por luistar
hola
usando xml tienes muchas posibilidades
como lo que dice julio archila, puedes tener los glosarios en archivos separados por letra, asi cargas lo necesario en el momento adecuado

- tmb puedes usar un solo archivo xml estructurado de mejor manera, podría ser así:
Código:
<glosario>
	<letra id="A">
		<palabra id="actionscript">definción</palabra>
		<palabra id="addEvent">definción</palabra>
	</letra>
	<letra id="B">
		<palabra id="bailar">definción</palabra>
	</letra>
	.
	.
	.
</glosario>
de esa manera solo tienes que tomar los hijos del nodo que tenga la letra dada

- una estructura como la que tú propones también sirve
lo que se puede hacer al momento de mostrar las palabras en el LIST es verificar que la primera letra cumplar con el requisito y ya

- ésto último es aún mas sencillo usando el componente: DATASET

si tu nivel de ActionScript ya no es básico, puedes comenzar con los componentes
aquí te propongo una aplicación con componentes y xml donde es más fiable hacer el filtro no sólo por la primera letra, sino por las primeras...
quiere decir que mientras vayas escribiendo algo en el campo de texto, la lista se irá filtrando

descarga

:D saludos

luistar, el enlace para bajarse el archivo ese está roto. Se puede descargar desde otra parte? Me interesa mucho bajármelo para estudiarlo.
  #6 (permalink)  
Antiguo 31/05/2006, 07:32
Avatar de luistar  
Fecha de Ingreso: marzo-2005
Ubicación: Argentina
Mensajes: 939
Antigüedad: 19 años, 8 meses
Puntos: 0
teneis razón, confundí la url, es esta:
http://es.geocities.com/jorgemanuelv...iltro_list.zip
__________________
Si digo que soy mentiroso. ¿Lo soy?
  #7 (permalink)  
Antiguo 31/05/2006, 13:39
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 5 meses
Puntos: 3
Una cosa que no entiendo del código del glosario:

Código:
var llenarLista:Function = function(elementos:Array):Void{
	var datos_tmp:Array = new Array();
	for(var n=0;n<elementos.length;n++){
		datos_tmp.addItem({label:elementos[n].attributes.id, data:n});
	}
	los_datos.items = datos_tmp;
	los_datos.filtered = false;
	glosario_list.dataProvider = los_datos.dataProvider;
}
aquí veo que tratas a la variable datos_tmp, de tipo Array, como si fuera un objeto de tipo DataSet. Es posible hacer eso?
  #8 (permalink)  
Antiguo 31/05/2006, 14:44
Avatar de luistar  
Fecha de Ingreso: marzo-2005
Ubicación: Argentina
Mensajes: 939
Antigüedad: 19 años, 8 meses
Puntos: 0
un Array no sólo puede contener elementos simples como número o cadenas
sus elementos pueden ser de muchos tipos como referencias a instancias de clase y objectos

considera este ejemplo:
Código:
var ejemplo:Array = new Array();
for(var n=10;n>0;n--) ejemplo.push({posicion:n,foto:'foto_'+n+'.jpg'});
//----------->
for(var k in ejemplo) trace(ejemplo[k].posicion+'. '+ejemplo[k].foto);
en este caso sus elementos son objetos con las propiedades posicion y foto
entiéndase esta sutuación análoga a un Array asociativo (que no existe en ActionScript)

aunque el método addItem no es propio de la clase Array sino de algunos componentes
se puede usar para agregar elementos al array siempre que se trabaje en contexto de lenguaje de componentes

obtendríamos el mismo resultado con:
datos_tmp.push({label:elementos[n].attributes.id, data:n});

________________
__________________
Si digo que soy mentiroso. ¿Lo soy?
  #9 (permalink)  
Antiguo 04/04/2007, 08:59
 
Fecha de Ingreso: abril-2007
Ubicación: Montevideo-Uruguay
Mensajes: 5
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Xml y Flash

Hola, entendí todo ...pero tenía una duda..
yo quiero poner en una de las definiciones del glosario, una palabra con un vínculo, que al hacerle clic al mismo me abra una imagen en un contenedor(unMovieClip). Espero que se haya entendido mi pregunta..espero info, muchas gracias..y si tienen algún ejemplo..excelente!!!
saludos,



--
nicolás bianchi
webmaster
  #10 (permalink)  
Antiguo 04/04/2007, 11:39
Avatar de julio archila  
Fecha de Ingreso: marzo-2005
Ubicación: Quetzaltenango, Guatemala
Mensajes: 272
Antigüedad: 19 años, 8 meses
Puntos: 0
Re: Xml y Flash

que hay nicobf:

Con respecto a la pregunta que haces me imagino que lo que queres hacer es un tipo de galería, echale un vistaso a esta que yo hice a ver si es lo que necesitas para poderte ayudar -> http://www.futuraxela.com/galeria1.html

Salu2...
__________________
Julio Archila
  #11 (permalink)  
Antiguo 29/09/2008, 13:45
 
Fecha de Ingreso: julio-2008
Mensajes: 9
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Xml y Flash

hola, yo estoy haciendo algo muy parecido a lo de din. tengo en una pelicula todos los botones desde la A hasta la Z.. Y a darle click me muestra los conceptos de cada una que los tengo en unos fotogramas.. la pregunta es la siguiente tengo q hacer una busqueda dentro del glosario. ej: que ponga en alguna parte la palabra amor y ella busque el significado y lo muestra...y no se como hacerlo sera que ustedes me podrian ayudar y si tienen un ejemplo se los agradeciria. GRACIAS
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 00:15.