• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

wrproject

[ActionScript] XML+Flash

1 mensagem neste tópico

fonte: http://www.flashmasters.com.br/?site=tutoriais&as=mostra&cat=4&id=49

Olá FlashMasters! Gostaria de agradecer ao diversos e-mails enviados a mim e as sugestões dadas neles, peço desculpas aos que eu ainda não respondi! Vamos falar hoje da interacção do Flash com o XML, um assunto que eu creio que seja do interesse de muitos que mexem com Flash.

Porque usar o XML? Não seria mais fácil usar um Banco de Dados? Isso vai depender da aplicação, onde iremos usar o XML. O XML serve como uma base de dados, mas não tem muita segurança, não pode guardar dados como senhas pois ele roda no cliente e não no servidor. A vantagem de se usar o XML é o fato de não precisarmos utilizar um Banco de Dados e uma linguagem para transportar os dados entre o Flash e o Banco de Dados. Vale lembrar que o Flash apenas lê o arquivo XML ele não tem a habilidade de alterar ou criar novos valores no XML.

Então chega de papo e vamos começar a brincadeira!

Antes de mais nada veremos quem é o tal do XML (se é que você já não o conhece).

Exemplo:

<?xml version="1.0" encoding="iso-8859-1"?>
<Estudando>
   <XML id="Flash no Atributo id"/>
   <XML>Flash dentro da TAG XML</XML>
</Estudando>

Acima temos um pequeno exemplo do XML. Na 1ª linha temos a versão do XML e o Enconding que habilita os acentos, dessa forma podemos usar acentos nas Tags.

Perceba que a linha 3 é diferente da linha 4. Porque? Simples, podemos declarar apenas atributos na tag XML ao invés de <Abrir> Escrever e </Fechar>. Muito mais simples <Abrir escrever="e fechar"/>, mas isso vai de acordo com a aplicação.

Escreva o XML acima e salve o arquivo com o nome de iniciando_xml.xml.

Agora no Flash crie um arquivo, salve na mesma pasta em que salvou o XML, com o nome de iniciando_xml.fla e em seguida abra o painel de acções (F9).

Vamos fazer com que o Flash leia o arquivo XML e nos mostre na janela de saída:

System.useCodepage = true;/*Lê o documento com os acentos, se o System.useCodepage for igual a false, nenhum acento será exibido.*/
var meuXML:XML = new XML();/*Declara um novo objecto XML*/
meuXML.load("iniciando_xml.xml");/*Carrega o arquivo XML*/
meuXML.ignoreWhite = true;/*Ignora os espaços em branco do XML*/
meuXML.onload = function(){/*Quando o XML for carregado, executa a função*/
trace(this);/*mostra o conteúdo de meuXML na janela de saída*/
}

O seguinte script mostra o conteúdo do nosso arquivo XML na janela de saída.

Simples demais não é mesmo? Vamos mostrar então a 2ª linha na Janela de saída, ou seja, do 1º nó filho do XML e seu conteúdo.

System.useCodepage = true;
var meuXML:XML = new XML();
meuXML.load("iniciando_xml.xml");
meuXML.ignoreWhite = true;
meuXML.onload = function(){
  trace(this.childNodes);
}

Na janela de saída aparecerá o seguinte:

<Estudando><XML id="Flash no Atributo id" /><XML>Flash dentro da TAG XML</XML></Estudando>

chidNodes se refere ao 1º nó filho do XML.

Muito legal, mas isso ainda não é nada...

Agora vamos continuar, vamos exibir os nós filhos da tag Estudando.

System.useCodepage = true;
var meuXML:XML = new XML();
meuXML.load("iniciando_xml.xml");
meuXML.ignoreWhite = true;
meuXML.onload = function(){
  trace(this.childNodes[0].childNodes);
}

Resultado: <XML id="Flash no Atributo id" />,<XML>Flash dentro da TAG XML</XML>

Note que agora depois de childNodes vem o [0] que é uma array que indica qual o nó que deve ser lido, isso vai ficar mais claro depois. Ainda podemos utilizar o firstChild que tem o mesmo valor que childNodes[0], afinal ambos fazem referência ao 1º nó do XML.

Então poderíamos utilizar:

System.useCodepage = true;
var meuXML:XML = new XML();
meuXML.load("iniciando_xml.xml");
meuXML.ignoreWhite = true;
meuXML.onload = function(){
  trace(this.firstChild.childNodes);
}

Também vemos que tem mais um childNodes. Tente interpretar o código da seguinte forma:

this = este é o XML, dentro dele temos o nó filho Estudando e os demais nós filhos.

this.childNodes[0] ou this.firstChild = este é o 1º nó filho do XML (Estudando).

this.childNodes[0].childNodes = estes são os nós filhos da tag Estudando.

Agora que refrescamos um pouco sua cabeça, vamos mostrar somente o 1º nó filho da tag Estudando:

System.useCodepage = true;
var meuXML:XML = new XML();
meuXML.load("iniciando_xml.xml");
meuXML.ignoreWhite = true;
meuXML.onload = function(){
  trace(this.childNodes[0].childNodes[0]);
} 

Resultado: <XML id="Flash no Atributo id" />

Perceba que agora o 2º childNodes tem uma array também, o [0] se refere ao 1º nó filho da tag Estudando, se você colocar [1] ao invés de [0] verá o 2º nó filho da tag Estudando. Faça isto, o resultado é o seguinte:

<XML>Flash dentro da TAG XML</XML>

Tudo muito legal, mas... porque sempre aparece essas malditas tags? E pra que serve o atributo id do 1º nó filho da tag Estudando?

Vamos fazer o seguinte, vamos mostrar o conteúdo do atributo id e logo abaixo vamos mostrar o conteúdo do 2º nó filho da tag Estudando:

System.useCodepage = true;
var meuXML:XML = new XML();
meuXML.load("iniciando_xml.xml");
meuXML.ignoreWhite = true;
meuXML.onload = function(){
  trace(this.childNodes[0].childNodes[0].attributes.id);
  trace(this.childNodes[0].childNodes[1].childNodes);
}

Resultado:

Flash no Atributo id

Flash dentro da TAG XML

Melhorou né? Agora vou explicar:

this.childNodes[0].childNodes[0].attributes.id

this.childNodes[0] = indica o 1º nó filho do XML.

this.childNodes[0].childNodes[0] = indica o 1º nó filho da tag Estudando que é o 1º nó do XML ( ai minha cabeça...).

this.childNodes[0].childNodes[0].attributes.id = indica blabla um atributo de nome "id", assim o Flash lê o que consta dentro de id.

this.childNodes[0].childNodes[1].childNodes

Praticamente a mesma lenga-lenga, mas com uma grande diferença, aqui não usamos atributos, portanto um childNodes adicional que diz ao Flash para ler o conteúdo daquele nó. (ai minha cabeça novamente...).

Para entender de vez a hierarquia do negócio, abaixo um exemplo do XML indicando o que o Flash vai ler conforme o código que usamos:

<?xml version="1.0" encoding="iso-8859-1"?>
<Estudando>
<XML id="Flash no Atributo id"/>
<XML>Flash dentro da TAG XML</XML>
</Estudando>

Para que o Flash leia todo o XML usamos apenas o this.

Para que o Flash leia a linha 2 e o seu conteúdo usamos this.firstChild ou this.childNodes.

Para ler a linha 3 usamos this.firstChild.firstChild ou this.childNodes[0].childNodes[0]

Para ler o atributo "id" da linha 3 usamos this.firstChild.firstChild.attributes.id ou this.childNodes[0].childNodes[0].attributes.id

Para ler toda a linha 4 usamos this.firstChild.childNodes[1] ou this.childNodes[0].childNodes[1]

Para ler o conteúdo que está entre as tags <XML> na linha 4 usamos this.firstChild.childNodes[1].childNodes ou this.childNodes[0].childNodes[1].childNodes

Agora que sabemos como ler o conteúdo do XML, para exibir eles em um campo de texto é extremamente simples, basta criar um campo de texto dinâmico instanciá-lo (ex.: texto1) e escrever o seguinte código:

System.useCodepage = true;
var meuXML:XML = new XML();
meuXML.load("iniciando_xml.xml");
meuXML.ignoreWhite = true;
meuXML.onload = function(){
  texto1.text = this.childNodes[0].childNodes[0].attributes.id
}

Bom, isso já dá uma base para vocês estudarem bastante, inventem, tentem, isso vai fazer com que vocês peguem a prática e em breve façam isso de olhos vendados. Aguarde, em breve mostrarei mais do Flash + XML e como usar componentes com o XML.

Até a próxima

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora