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:
<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:
Muito simples até então…
Usando o E4X, podemos mostrar o conteudo do nosso MXL por partes, vejam:
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…
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:
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.




3 Comentários
buen ejemplo, aunque deberias poner un link para que puedan bajar el ejemplo y lo puedan probar, nada mejor que la practica.
salu2.
Valeu cara! Me ajudou bastante este artigo!
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.