Ir para conteúdo

POWERED BY:

Arquivado

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

frequenciavirtual

[Resolvido] XML e flash

Recommended Posts

Tenho um codigo em PHP gerando um arquivo XML:

 

<?xml version="1.0"?>
<agenda>
<agenda>
<local>1º Carnaval de Rua</local>
<cidade>Itapejara - Banda Sagytaryus</cidade>
<estado>PR</estado>
<data>2009-02-22</data>
</agenda>
<agenda>
<local>Jean Carlos e Cristiano e Banda Ceu e Cantos</local>
<cidade>Rancho Brasil</cidade>
<estado>Xanxere - SC</estado>
<data>2009-03-20</data>
</agenda>
<agenda>
<local>Em breve</local>
<cidade>Agenda Completa</cidade>
<estado>Aguarde,...</estado>
<data>2009-03-30</data>
</agenda>
</agenda>

No action estou usando o seginte:

var eventosXML : XML = new XML();
eventosXML.load ("http://localhost/DDS/flash/contato.xml")
eventosXML.ignoreWhite = true;
System.useCodepage = true;
///////////////////////////
eventosXML.onLoad = function (){
	carrega()
}
/////////////////////
function carrega(){
fundo_event.load(mostrar_eventos)
mostrar_eventos.text = eventosXML.firstChild.childNodes[i].attributes.agenda

}

qdo faço a chamada aparece apenas undefined

 

O que esta acontecendo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai retornar undefined sempre...

 

Afinal ali não tem nenhum atributo é tudo Node.

 

tente assim:

mostra_eventos.text = eventosXML.firstChild.childNodes.childNodes;

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora aparece assim

 

_level0.instance28.mostrar_eventos

 

o que fiz foi o seguinte:

 

criei um movie clip chamado fundo_evento que é o fundo onde vao aparecer os dados

dentro deste fundo criei um dynamic text instanciado como mostrar_eventos onde estou tentando fazer com que estes dados se posicionem

 

acredito ser este o procedimento correto.

 

Ainda estou gatinhando em action script.

 

Mas vou aprendendo com a ajuda dos amigos do forum.

 

ainda nao deu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça assim pra você mesmo aprender:

var eventosXML : XML = new XML();
eventosXML.load ("http://localhost/DDS/flash/contato.xml")
eventosXML.ignoreWhite = true;
System.useCodepage = true;
///////////////////////////
eventosXML.onLoad = function (){
	var total = eventosXML.firstChild.childNodes.lenght;
	for(var i = 0; i < total; i++){
		trace(eventosXML.firstChild.childNodes[i].childNodes;
	}
}
/////////////////////

Abraços

 

Ai ele deve retornar todo conteudo do seu XML

 

Da uma pesquisada no help do flash mesmo como que faz... que se vai ver que não é complicado........

 

E por favor sempre use TRACE pra procurar todos os erros que der...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

continiua aparecendo a mesma mensagem.

 

usando o TRACE o output aparece em branco

Na verificação de codigo aparece correto.

 

e o xml esta lah na mesma pasta no localhost.

 

uso o CS4

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom seu xml ta assim

<?xml version="1.0"?>
<agenda>
	<agenda>
		<local>1º Carnaval de Rua</local>
		<cidade>Itapejara - Banda Sagytaryus</cidade>
		<estado>PR</estado>
		<data>2009-02-22</data>
	</agenda>
	<agenda>
	   <local>Jean Carlos e Cristiano e Banda Ceu e Cantos</local>
	   <cidade>Rancho Brasil</cidade>
	   <estado>Xanxere - SC</estado>
	   <data>2009-03-20</data>
	</agenda>
	<agenda>
	   <local>Em breve</local>
	   <cidade>Agenda Completa</cidade>
	   <estado>Aguarde,...</estado>
	   <data>2009-03-30</data>
	</agenda>
</agenda>

Obvio que se você usar:

var eventosXML : XML = new XML();
eventosXML.load ("http://localhost/DDS/flash/contato.xml")
eventosXML.ignoreWhite = true;
System.useCodepage = true;
///////////////////////////
eventosXML.onLoad = function (){
	var total = eventosXML.firstChild.childNodes.lenght;
	for(var i = 0; i < total; i++){
		trace(eventosXML.firstChild.childNodes[i].childNodes;
	}
}
Trace vai retornar vazio..... OBVIO pq?? é simples...

 

Seu XML é asssim

<agenda> <------ firstChild

<agenda> <------ childNodes

<dados> <------ childNodes

 

Então o código acima sempre vai retornar nada

Você para retornar alguma coisa faça:

var eventosXML : XML = new XML();
eventosXML.load ("http://localhost/DDS/flash/contato.xml")
eventosXML.ignoreWhite = true;
System.useCodepage = true;
///////////////////////////
eventosXML.onLoad = function (){
	var total = eventosXML.firstChild.childNodes.lenght;
	for(var i = 0; i < total; i++){
		trace(eventosXML.firstChild.childNodes.childNodes[i].childNodes;
	}
}

E tadã!!! retornou...

 

Por isso falei pra você usar o trace... para procurar seu proprio erro...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estamos quase chegando.

Dois problemas acontecem

o primeiro é que as tags do XML estao visiveis tambem.

E quando o arquivo XML é carregado por um segundo aparece level0.mostrar_eventos e em seguida o arquivo carrega mostrando apenas o primeiro registro do xml e aparece desta forma:

 

<local>1º Carnaval de Rua</local>,<cidade>Itapejara - Banda Sagytaryus</cidade>,<estado>PR</estado>,<data>2009-02-22</data>

 

Sem as quebras de linha e com as tags do xml.

e apenas o primeiro dos 3 registros.

 

o codigo que estou usando agora é este:

var i:Number = 0;

var eventosXML : XML = new XML();
eventosXML.load ("http://localhost/DDS/flash/contato.xml")
eventosXML.ignoreWhite = true;
System.useCodepage = true;
///////////////////////////
eventosXML.onLoad = function (){
	carrega()
}
/////////////////////
function carrega(){
fundo_eventos.load = eventosXML.firstChild.childNodes[i].childNodes;
mostrar_eventos.text = eventosXML.firstChild.childNodes[i].childNodes;

trace(eventosXML.firstChild.childNodes[i].childNodes);

}
stop();

Compartilhar este post


Link para o post
Compartilhar em outros sites

fundo_eventos.load = eventosXML.firstChild.childNodes.childNodes;

 

fundos_eventos.load não existe....

 

 

isso ai não serve pra nada.

 

E como já disse... pesquise dentro dos seus childs

garanto que achará a resposta...

 

Mude o de lugar...

 

Que tal assim?

eventosXML.firstChild.childNodes.childNodes;

Que lhe parece?

 

 

Quanto ao aparecer

level0.mostrar_eventos é pq você setou no campo de texto dinamico mostrar_eventos como variavel tbm alem de instancia...

 

Para isso não acontecer

coloque no inicio do seu programa antes de entrar em função alguma

mostrar_eventos = "";

 

Ou simplesmente remova mostrar_eventos do campo de variavel do dinamic text...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz a chamada do XML desta forma:

 

function carrega(){

mostrar_eventos.text = eventosXML.firstChild.firstChild.childNodes[i].childNodes;
apareceu apenas o primeiro registro do primeiro item do xml

 

1º Carnaval de Rua

 

e aparece sem as tags do xml

 

porem no trace fiz o seguinte:

trace(eventosXML.firstChild.firstChild.childNodes[i].childNodes);
trace(eventosXML.firstChild.firstChild.childNodes[1].childNodes);

e aparece os dois registros na saida

1º Carnaval de Rua

Itapejara - Banda Sagytaryus

 

Porém se eu coloco:

function carrega(){

mostrar_eventos.text = eventosXML.firstChild.firstChild.childNodes[i].childNodes;
mostrar_eventos.text = eventosXML.firstChild.firstChild.childNodes[1].childNodes;

aparece na tela apenas o segundo registro ignorando o primeiro.

Itapejara - Banda Sagytaryus

fiquei ate duas e meia da manha pesquisando sobre estas childs mas como citei anteriormente nao entendo muito sobre este assunto

a dificuldade continua porem bem mais esclarecido

aparentemente falta pouca coisa para acertar.

 

Lembrando que fiz uma pequena alteração no meu xml para nao repetir mesmos nomes,

agora esta assim

<?xml version="1.0"  encoding="UTF-8"?>
<agenda>
  <conteudo>
   <local>1 Carnaval de Rua</local>
   <cidade>Itapejara - Banda Sagytaryus</cidade>
   <estado>PR</estado>
   <data>2009-02-22</data>
  </conteudo>
 <conteudo>
   <local>Jean Carlos e Cristiano e Banda Ceu e Cantos</local>
   <cidade>Rancho Brasil</cidade>
   <estado>Xanxere - SC</estado>
   <data>2009-03-20</data>
 </conteudo>
 <conteudo>
   <local>Em breve</local>
   <cidade>Agenda Completa</cidade>
   <estado>Aguarde,...</estado>
   <data>2009-03-30</data>
 </conteudo>
</agenda>

Mais alguma luz por aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mostrar_eventos.text = eventosXML.firstChild.firstChild.childNodes.childNodes; <---------- metodo errado

 

mostrar_eventos.text = eventosXML.firstChild.childNodes.childNodes.childNodes; <----------- metodo certo

 

Crie um for como eu já disse... para ver todos os resultados...

 

Ficar dando resultado na mão não vai rolar.

faz um for pra ler isso

 

E por favor leia: link

 

e link

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

1º - Na quero o resultado na mão, se eu quisesse na mao eu comprava em algum lugar o trabalho pronto e nao ficava como citei ate duas e pouco da manha pesquisando.

 

2º - Leio todos os links e artigos que me indicam.

 

3º - Obrigado por todas as informações que tem passado como ja citei em outro post sua ajuda em sido de imenso valor, tendo em vista sou iniciante nesta nova linguagem, faço algumas coisas em PHP mas action e flash é novidade pra mim.

 

4º - Vou ler agora os links que me passou

 

 

Obrigado!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu disse quanto o na mão

 

E colocar:

texto1 = Array[1]

texto2 = Array[2]

 

O melhor jeito de se fazer isso tanto no ActionScript como no php é usando o laço for, ou um while... ou um intervalo etc.

 

no caso seu xml estaria assim

 

firstChild.childNodes.childNodes.childNodes;

 

E o conteudo disso ai é isso:

<agenda><agenda><local> conteudo do local </local></agenda></agenda>

 

É isso que ele vai pegar entendeu?

Seria como

Pai, filho, filho do filho, o que o filho disse.

 

Então é sempre bom ver a sequencia que você fez para pegar o conteudo da mesma maneira ;)

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lamentavelmente nao estou conseguindo.

 

Fiz das maneiras como citou e nao deu.

 

usei o laço for como indicado e começou aparecer o 3º registro do ultimo conteudo a xml

 

Ate consegui sem o for fazer aparecer todos os dados, mas somente com todas as tags do xml.

 

O dia todo tentando e nao deu.

 

entendi razoavelmente as questoes do firstChild e ChildNodes mas de diversas maneiras nao deu certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você colocar apenas 1 campo de texto para todas as variáveis...

Não vai rolar......

Vai sempre mostrar o ultimo valor.

 

Isso significa que seu código estava correto.

 

O que você tem que fazer agora é o proximo passo... colocar o conteudo com quebras de linha para poder colocar varias informações.

 

E normalmente se coloca todo o conteudo de um xml em um array!!! assim você pode chamar ele mais tarde.

 

Para ver como se faz eis uma dica:

link

 

E veja que eu coloquei um XML de exemplo... tente aplicar o código. Que está no blog, depois tente usar o seu xml mudando na chamada.

E vai usando trace para ver se ta pegando o conteudo ou não.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha o que aconteceu:

usei este codigo:

 

var mostrar_eventos:Array = new Array();
var eventosXML : XML = new XML();
eventosXML.load ("http://localhost/DDS/flash/contato.xml")
eventosXML.ignoreWhite = true;
System.useCodepage = true;
///////////////////////////
eventosXML.onLoad = function(ok){
	if(ok){
		var dados = eventosXML.firstChild.childNodes.length;
		for(var i:Number = 0; i < dados; i++){
			mostrar_eventos[i] = eventosXML.firstChild.childNodes[i].childNodes[i].childNodes;
			trace(mostrar_eventos[i]);
		}
	}
	else {
		trace(Erro);
	}
}
stop();
e o resultado foi o seguinte na tela do flash nao apareceu nada

 

enquanto isso no trace aparece

 

1º Carnaval de Rua ------ 1º Registro nos primeiros dados do xml

Rancho Brasil ----------- 2º Registro na segunda coluna de dados do xml

Aguarde,...------------ 3º Registro na ultima coluna d dados do xml

 

Se no trace aparece estes dados porque na tela do flash nao imprime?

Compartilhar este post


Link para o post
Compartilhar em outros sites

refiz tudo novamente mas nao consegui resolver

olha o codigo agora:

var eventos = new Array();
var eventosXML : XML = new XML();
eventosXML.load ("http://localhost/DDS/flash/contato.xml")
eventosXML.ignoreWhite = true;
System.useCodepage = true;
///////////////////////////
eventosXML.onLoad = function(){
	carrega();
}
///////////////////////////////
function carrega(){
	for(var i:Number = 0; i < eventosXML.firstChild.childNodes.length; i++){
		eventos[i] = eventosXML.firstChild.childNodes[i].childNodes[0].childNodes;
		mostrar_eventos.text = eventos[i];
		trace(eventos[i]);
	}
	
}
stop();
Na tela do flash aparece o primeiro dado do ultimo registro

e no trace aparece o primeiro dado de cada um dos tres registros do XML

 

A duvida permanece

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu continuo postando minhas duvidas.

agora mudei um pouco o codigo.

var eventos = new Array();
var eventosXML : XML = new XML();
eventosXML.load ("http://localhost/DDS/flash/contato.xml")
eventosXML.ignoreWhite = true;
System.useCodepage = true;
///////////////////////////
eventosXML.onLoad = function(){
	carrega();
}
///////////////////////////////
function carrega(){
	var dados = eventosXML.firstChild.childNodes;
	for(var i:Number = 0; i < dados.length; i++){
		eventos[i] = eventosXML.firstChild.childNodes[0].childNodes[0].childNodes;
		mostrar_eventos.text = eventos[i];
		eventos[i] = eventosXML.firstChild.childNodes[0].childNodes[1].childNodes;
		mostrar_eventos1.text = eventos[i];
		eventos[i] = eventosXML.firstChild.childNodes[0].childNodes[2].childNodes;
		mostrar_eventos2.text = eventos[i];
		trace(eventos[i]);
	}
} 
stop();

e o resultado foi o seguinte:

1º Carnaval de Rua

Itapejara - Banda Sagytaryus

PR

Ou seja apareceu os tres primeiros dados do primeiro registro do xml.

 

preciso que apareça todos os dados no formato mencionado.

dei um "for" mas acredito nao estar funcionando

criei outros campos de texto para cada um mostrar o seu dado correspondente mas achei bastante tosco o codigo.

 

acredito que possa ser feito de uma maneira mais dinamica.

eu estou tentando e estou postando e enquanto nao achar a resposta nao vou desistir.

 

alguem tem ideia onde esta o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, li o tópico tentei entender mais não consegui...

Diga exatamente o que você quer... Listar todos os dados do seu XML em uma cx de texto em sequência como abaixo??

1º Carnaval de Rua

Itapejara - Banda Sagytaryus

PR

2009-02-22

 

Jean Carlos e Cristiano e Banda Ceu e Cantos

Rancho Brasil

Xanxere - SC

2009-03-20

 

etc...

Compartilhar este post


Link para o post
Compartilhar em outros sites

exatamente Public2004

 

Esta xml vem sendo gerada atraves de um arquivo PHP

 

e o que preciso realmente é mostrar todos os dados da xml como você colocou ali.

há dias já venho batalhando neste codigo porem sem sucesso.

 

Sendo que esta é pra ser uma agenda de evntos por isso preciso listar as tres listas de dados.

 

você entendeu o que preciso é exatamente isso que você postou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para adicionar varias coisas a uma caixa de texto tem que colocar assim:

 

texto.html = true;
//For
for(var i = 0; i  < xml.length; i++){
texto.htmlText += xml.childNodes[i] + "<br>";
}

Assim você vai adicionando dados a sua caixa de texto....

 

Lembre-se você precisa colocar o <br> para quebra de linha... se não vai sempre ficar colocando o texto 1 colado no outro.

 

Abraços

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

Edited:

 

O código que eu expliquei acima deveria funcionar, mas depois de testar percebi que não funciona...

Então criei esse que funciona ;)

 

Só seguir a lógica mas colocando seu xml

Código:

var texto:TextField = _root.createTextField("texto",1,20,20,510,360);
texto.border = true;
texto.wordWrap = true;
for(var i:Number = 0; i < 15; i++){
	if(i == 0){
		texto.text += "Essa é a primeira linha"+newline;
	} else if(i == 15){
		texto.text += "Essa é a ultima linha";
	} else {
		texto.text += "Essa é a linha "+i+newline;
	}
}

Abraços

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.