Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rafinhaphp

[Resolvido] listar todos nodes de um xml

Recommended Posts

salve galera.... seguinte:

 

 

to querendo listar todos os nodes de um XML pra um array, jah procurei no google, ma ta osso de encondrar.... algume pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie um arquivo XML de testes, carregue no Flash, e crie vários traces para estudar melhor a estrutura do arquivo XML dentro do Flash. Já sabe carregar o XML no Flash? Faça vários experimentos, os elementos que você mais vai utilizar são firstChild e childNodes, você também vai precisar de loops for para percorrer todos os elementos do XML e ir salvando em um array. Já fez algo? Poste aí para podermos lhe ajudar melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ó manu, eu fiz isso aqui... mas só carrega uma foto.. =/

//abre o XML
System.useCodepage = true;
var arquivo:XML = new XML();
arquivo.load("xml.xml");
arquivo.ignoreWhite = true;


//Laço para listar tudo
for(i = 0; i < 2;i++){

	  //gambiarra pra juntar foto + o numero "i"
	var foto = "foto" + i;

	
	arquivo.onLoad = function() {
		//carrega as fotos
		loadMovie(arquivo.firstChild.childNodes[i].attributes.imagem,foto);
	}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu to tentando listar todas as fotos nos nodes do XML...

mas com o laço nun vai... axo que tenho que listar pra dentro de um array(); antes né?

 

mas ai que vem o problemas... eu ñ sei listar xml pro array();... ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja um exemplo para ler os dados:

 

arrFotos = new Array();
for(x in arquivo.firstChild.childNodes)
{
	arrFotos.push(arquivo.firstChild.childNodes[x].attributes.imagem);
}

Assim você vai ler uma foto. Não lembro agora se não tinha que colocar outro firstChild ali, porque lembro que o arquivo XML era meio xarope quando parseado no Flash, e quando você aplicava o firstChild não lembro agora se ele selecionava a tag root do XML ou acessava o arquivo XML em si, aí tinha que botar um firstChild para ele ler a tag root. Estou meio enferrujado então você precisa fazer alguns testes.

Como está seu arquivo XML? Tentou fazer os traces como eu disse? Lembre-se de verificar os valores de arquivo.firstChild, arquivo.firstChild.firstChild, arquivo.firstChild.childNodes, etc... para saber onde está o que, como eu disse estou enferrujado então não sei de cor xP Vê aí chapa!

Compartilhar este post


Link para o post
Compartilhar em outros sites

manu....eu to testando aqui... jah tentei ditudo, só falta macumba! kkkkk

 

 

sim testei oq você falow.... quando eu chamo só um no carrega normaL, mas quando tento chamar tudo nun rola... e esse script q você postou, u tentei usar aqui, mas ñ rolo, e eu ñ intendi muita coiza também! ( to iniciando com AS ainda )

 

 

xml.xml

<?xml version="1.0" encoding="iso-8859-1"?>
<galeria>
<foto imagem="0.jpg" />
<foto imagem="1.jpg" />
<foto imagem="2.jpg" />
</galeria>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para pegar isso ai é mole :)

 

var xml:XML = new XML();
xml.ignoreWhite = true;
xml.load("xml.xml");
var imagens:Array = new Array();

xml.onLoad = function(ok){
if(ok){
var total = xml.firstChild.childNodes.lenght.
for(var i:Number = 0; i < total; i++){
imagens[i] = xml.firstChild.childNodes[i].imagem;
trace(imagens[i]);
}
}else {
trace("deu erro ao carregar o xml");
}

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

ahh legaL.... esse "lenght" pega a quantidade de nodes? ou nadavê?

 

mas assim, to meio perdido aqui..porq ainda estou aprendendo actionscript... e na verdade ñ rolo... eu coloquei um ";" na linha 8 que tava errado... mas ñ funcionou, e nen deu aviso de erro... =/

 

 

eu suspeito que seja esses "ok" que eu tenho que subistituir por alguma coiza né?rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não o ok é só um valor bolean acusando true

 

tem nada a ver com nada... você pode colocar qualquer coisa ali

 

Normal eu troca . por ; e não é obrigatorio ; no flash você pode deixar sem nada que não vai dar nenhum problema.

 

var xml:XML = new XML();
xml.ignoreWhite = true;
xml.load("xml.xml");

var imagens:Array = new Array();

xml.onLoad = function(ok) {
	if (ok) {
		var total = xml.firstChild.childNodes.length;
		for (var i:Number = 0; i < total; i++) {
			imagens[i] = xml.firstChild.childNodes[i].imagens;
			trace(imagens[i]);
		}	
	}else {
		trace("error");
	}
}

 

E meu length tava errado ;) ta escrito lenght no escrito acima :)

 

Testa esse ai...

 

E sugiro que quando alguem mandar código assim como estou fazendo... não copie e cole...

Veja como foi feito e tente fazer igual...

 

Pois as vezes a pessoa pode ter digitado diretamente aqui... como foi no meu caso... ai podem ocorrer erros de digitação... troca de letras etc. causando assim o erro.

 

E lembrando que o código acima foi criado com base no xml que você mostrou...

 

Então se seu XML não esta como você mostrou deve adaptar os códigos.

 

Abraços e bons estudos

Compartilhar este post


Link para o post
Compartilhar em outros sites

aheeeeeeeeeeeeeeeee agora "foi" na verdade tava errado ainda na linha:

 

 

imagens[i] = xml.firstChild.childNodes[i].imagens;

 

ai eu coloquei um attributes e foi!

imagens[i] = xml.firstChild.childNodes[i].attributes.imagem;

vo dar uma estudada legaL nesse script aqui pra entender bem...

 

 

 

manu, sobre os ";"... esses dias eu tava vendo uma video aula, de um "baxinho" que tava fz uma galeria de fotos com AS e XML... e ele ñ colocava os ";" axei meio estranho porq no PHP tem que ficar colocando ";"... bom saber disso, mas seila, é melhor colocar sempre né?

 

 

mas valew manin. esse script me ajudou muito!

agora só tenho que duplicar os MC, pegar tamanho pra centralizar a img, mas isso é uma outras história! rsrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa... manu, me ajuda em mais uma duvida aqui, acredito ser coiza simples... bom, jah estou carregando as imagens do XML, ta tudo OK, mas eu colokei um onPress em cada imagem carregada, mas ele ñ funciona.... ta ai o script completo:

 

 

var xml:XML = new XML();
xml.ignoreWhite = true;
xml.load("xml.xml");

var imagens:Array = new Array();

	xml.onLoad = function(ok) {

	// pega o numero de NODES que tem no XML
	var total = xml.firstChild.childNodes.length;
		for (var i:Number = 0; i < total; i++) {
			
		
		//lista os NODES no array
		imagens[i] = xml.firstChild.childNodes[i].attributes.imagem;
		
				
		// cria a variavel que vai carregar a img
		var carrega:MovieClipLoader = new MovieClipLoader()
		//carrega as fotos
		carrega.loadClip(imagens[i],"foto" + i);
		   
		
		
		foto + i.onPress = function(){
			trace("cliquei");
		}
		
		   
		   
		}
			
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

seu erro é que o que você ta fazendo não existe

 

foto + i.onPress = function(){ <------------- impossivel de fazer

 

 

foto.onPress = function(){ <------------------- metodo correto de se fazer!

 

Para que você consiga colocar um botão em um mc

 

Coloque depois da função onLoadInit()

 

Bom aqui vai um exemplo com base na sua função acima..

var xml:XML = new XML();
xml.ignoreWhite = true;
xml.load("xml.xml");

//Crie o objeto ouvinte de função mais conhecido como listener
var listener:Object = new Object();
//Outra regra variaveis que devem ser globais são declarada fora de funções
//Por isso declaro aqui a variavel do MovieClipLoader();
var carrega:MovieClipLoader = new MovieClipLoader();
//Adiciono o listener a função para que ao carregar o ouvinte saiba disso e chame a minha função
carrega.addListener(listener);
//Preciso agora criar um movieclip que vai ser carregado
var mc:MovieClip = new MovieClip();
//Crio o movieclip que vai ser duplicado
var duplicado:MovieClip = duplicar();

//Crio minha função que vai duplicar um movieclip
function duplicar(){
	var duplicado:MovieClip = this.createEmptyMovieClip("duplicado", this.getNextHighestDepth());
	return duplicado;
}
//Cria-se a array que vai receber as imagens
var imagens:Array = new Array();
xml.onLoad = function(ok) {
	// pega o numero de NODES que tem no XML
	var total = xml.firstChild.childNodes.length;
	for (var i:Number = 0; i < total; i++) {
		//lista os NODES no array
		imagens[i] = xml.firstChild.childNodes[i].attributes.imagem;
		/*
		*Aqui se eu quiser vou setar a posição x e y que deve ter meu movieclip duplicado
		*newY += 40;
		*newX = 0;
		*Chamo agora o duplicateMovie() para duplicar meu movieclip
		*/
		mc = duplicado.duplicateMovieClip("clip-" + i, i/*, {_y:newY, _x:newX}*/);
		//carrega as fotos
		carrega.loadClip(imagens[i],mc);
	}
}
 
//Aqui vou criar uma função que diz, ao iniciar ele faz o que eu pelo.
listener.onLoadInit = function(mc:MovieClip){
	mc.onPress = function(){
		gotoAndPlay(4);// <------ apenas um exemplo
	}
}

Mais explicado que isso só 2 disso...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

ausausausa... verdade manu, "Mais explicado que isso só 2 disso..." valew... ta dando pra entender!

 

 

só mais uma coizunha( vai quere me matar! rs ) esse script esta carregando só uma imagem!

 

eu dei um _alpha pra ver se ñ estava por traz, mas ñ estava ñ.. ta carregando só a 1° foto...

 

 

mas o curiozo é que quando eu clico nela, e vai pro frame (5), por exemplo, e quando volta carrega a 2°, ai eu clico denovo e quando volta carrega a proxima.... ai eu dei um for pra execultar meu script varias vezes, mas ñ funciona!

 

 

do geito que você escreveu, é pra carregar uma foto por vez mesmo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim do jeito que ta feito é para carregar 1 foto por vez......

 

 

O correto é pegar todo o xml de uma vez só com um for...

 

E quando acabar...

 

For(bla bla){

} <--- acabou

colocar uma função para carregar

tipo init();

 

 

Ai você quando der onLoadInit = function() você coloca um contador somando lá

e assim vai... e manda carregar o init() novamente e tals.

 

Assim por exemplo:

var xml:XML = new XML();
xml.ignoreWhite = true;
xml.load("xml.xml");

//Crie o objeto ouvinte de função mais conhecido como listener
var listener:Object = new Object();
//Outra regra variaveis que devem ser globais são declarada fora de funções
//Por isso declaro aqui a variavel do MovieClipLoader();
var carrega:MovieClipLoader = new MovieClipLoader();
//Adiciono o listener a função para que ao carregar o ouvinte saiba disso e chame a minha função
carrega.addListener(listener);
//Preciso agora criar um movieclip que vai ser carregado
var mc:MovieClip = new MovieClip();
//Crio o movieclip que vai ser duplicado
var duplicado:MovieClip = duplicar();
//Inicializo um contador
var cont:Number = 0;

//Crio minha função que vai duplicar um movieclip
function duplicar(){
	var duplicado:MovieClip = this.createEmptyMovieClip("duplicado", this.getNextHighestDepth());
	return duplicado;
}
//Cria-se a array que vai receber as imagens
var imagens:Array = new Array();
xml.onLoad = function(ok) {
	// pega o numero de NODES que tem no XML
	var total = xml.firstChild.childNodes.length;
	for (var i:Number = 0; i < total; i++) {
		//lista os NODES no array
		imagens[i] = xml.firstChild.childNodes[i].attributes.imagem;
	}
	init();
}

function init(){
		/*
		*Aqui se eu quiser vou setar a posição x e y que deve ter meu movieclip duplicado
		*newY += 40;
		*newX = 0;
		*Chamo agora o duplicateMovie() para duplicar meu movieclip
		*/
		mc = duplicado.duplicateMovieClip("clip-" + i, i/*, {_y:newY, _x:newX}*/);
		//carrega as fotos
		carrega.loadClip(imagens[cont],mc);
}
//Aqui vou criar uma função que diz, ao iniciar ele faz o que eu pelo.
listener.onLoadInit = function(mc:MovieClip){
	mc.onPress = function(){
		gotoAndPlay(4);// <------ apenas um exemplo
	}
	cont++;
	init();
}

Se tu tivesse lido meu tutorial... lá na parte de artigos e tutoriais... ja tinha feito isso ai ;)

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

powwwwwwww manu.... porq você ñ falou antes! rsrsrs

 

to vendo seu tutorial aqui, é exxxxxatamente oque eu quero!

desculpa o encomodo ai e valew!

 

 

weeeeeeeee, consegui! rsrsrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.