Tutorial Flex – XML / E4X


Trabalhar com xml no flex pode ser uma dor de cabeça, mas usando o chamado E4X é muitoooo facil.

O E4X (ECMAScript for XML) é uma “libraria” adicionada no Action Script 3 para trabalhar nativamente com XML e que têm como principal objectivo simplificar o acesso a ficheiros/conteudo XML. Utilizando o E4X podemos aceder aos items do xml como se fossem objectos no Action Script.

Vi alguns tutoriais pela net, mas ou estão incompletos ou são demasiado complexos… por isso meti mãos à obra e decidi escrever um tutorial para que possam entender melhor de uma forma bem clara e em Português.

Vamos então começar…

Se alguém já trabalhou com xml da forma “normal/antiga” sabe bem como as coisas se podiam complicar, aliás, já eram complicadas por natureza principalmente com os metodos .firstChild e childNodes que em xml’s mais complicados simplesmente era uma confusão trabalhar com eles e detectar erros no código…

Vejamos o seguinte código XML:

<loja>
<artigo>
<nome>Tenis Nike</nome>
<modelo>90</modelo>
</artigo>
<artigo>
<nome>Tenis Puma</nome>
<modelo>Sport fun</modelo>
</artigo>
<artigo>
<nome>Tenis Adidas</nome>
<modelo>AD 215</modelo>
</artigo>
</loja>

Isto é um genero simples de um XML, que pode ser representado em actionscript assim:

private var meuXML:XML =<loja><artigo><nome>Tenis Nike</nome><modelo>90</modelo></artigo><artigo><nome>Tenis Puma</nome><modelo>Sport fun</modelo></artigo><artigo><nome>Tenis Adidas</nome><modelo>AD 215</modelo></artigo></loja>;

Muito simples até então…

Usando o E4X, podemos mostrar o conteudo do nosso MXL por partes, vejam:

private function mostra():void{
for each(var item in meuXML..artigo){
trace("Artigo: "+artigo.nome+" do modelo "+artigo.modelo);
}
}
//ou podemos ainda mais simplesmente fazer:
trace("artigos"+meuXML..artigo.*);

E assim podemos percorrer o nosso XML e listar os items…

Algum exemplos de leitura e procura no XML:
trace("artigo 1: "+meuXML..artigo[1]);
//lista o nome e modelo em formato xml
 
trace("nome artigo 1: " + meuXML..artigo[1].nome.text());
//lista o conteudo do do primeiro artigo
 
trace("modelo artigo 1: "+meuXML.artigo[1].modelo.text());
//lista o conteudo do do primeiro artigo
 
trace("id do artigo 1: "+meuXML..artigo[1].@id);
//lista o id="" do artigo 1
 
trace("procurar infos do artigo com id=2"+ meuXML..artigo.(@id=="2").*);
//lista em formato xml o nome e modelo do artigo 2 efectuando uma procura
 
trace("procurar nome do artigo com id=2"+ meuXML..artigo.(@id=="2").nome.text());
//lista o nome do artigo com id="2";
 
trace("procurar modelo do artigo com id=2"+ meuXML..artigo.(@id=="2").modelo.text());
//lista o modelo do artigo com id="2";

Muito simples ah?

E pronto, podem ver como é simples trabalhar com xml… vou dar um exemplo de atribuir ao meuXML um ficheiro xml externo:

import flash.net.URLLoader
private var meuXML:XML;
private var loader:URLLoader;
 
private function carregaXML():void {
loader=new URLLoader();
loader.addEventListener(Event.COMPLETE, onComplete);
loader.load(new URLRequest("http://www.meusite.com/meu_ficheiro_xml.xml"));
}
 
private function onComplete(evt:Event):void
{
meuXML = new XML(loader.data);
//e pronto, a pratir de aqui têm o conteudo do xml na variavel e podem usar as operações que indiquei em cima.
}

Para carregar o xml, basta na vossa aplicação flex usar o trigger creationComplete=”carregaXML()”

Como vêm… já não há desculpas para nâo trabalhar com XML usando o E4X!

Espero que seja util

Abraço.

Deixe um comentário ou um Trackback
   

3 Comentários

  1. Hiram Galindo
    Outubro 4, 2008 às 9:52 pm | Permalink

    buen ejemplo, aunque deberias poner un link para que puedan bajar el ejemplo y lo puedan probar, nada mejor que la practica.
    salu2.

  2. Junho 10, 2009 às 12:51 am | Permalink

    Valeu cara! Me ajudou bastante este artigo!

  3. Phrix
    Novembro 23, 2009 às 3:55 pm | Permalink

    Muito bom sua dica, me ajudou muito aqui em um projeto, porém você saberia dizer se tem como excluir um registro do XML usando o E4X ?

    Valeu.

3 Trackbacks

  1. Por Flex + Rails com RubyAMF « ramalho.wordpress.com em Setembro 18, 2008 às 12:56 pm

    [...] o método GET do protocolo HTTP. O resultado – que sabemos ser em XML – será tratado pelo E4X, que é uma biblioteca de acesso nativo ao XML. Quando o serviço entrar em ação, o cursor irá [...]

  2. Por User links about "e4x" on iLinkShare em Setembro 28, 2008 às 12:03 pm

    [...] | user-saved public links | iLinkShare 3 votesTitorial Flex – XML / E4X>> saved by humeid 1 days ago3 votes[eactif] AS3 E4X All U need>> saved by interactivar 7 days ago4 [...]

  3. Por Recent Links Tagged With "e4x" - JabberTags em Outubro 25, 2008 às 11:34 am

    [...] by Zackarito on Sat 25-10-2008 10 Reasons We Love Flex Saved by wisenheimer on Sat 25-10-2008 Titorial Flex – XML / E4X Saved by kristenjanell on Fri 24-10-2008 Flex, aprende flex en una semana Saved by HeartofRoxas [...]

Deixe um comentário

O seu email nunca será publicado ou partilhado. Campos obrigatórios estão marcados com um *

*
*