Bha, estive vendo nos foruns, que muita gente estava com problemas para carregar XML no Flex. No inicio de carreira, tive a mesma dificuldade, principalmente porque o Flex tem o tal do Evento de retorno para receber os dados do Servidor.

Porém neste primeiro exemplo, não utilizei evento pára chamar um XML. chamei diretamente no código MXML a chamada do XML.

Arquivo main01.mxml
<mx:XML id="XMLexterno" source="/code/048/xml/xml01.xml"/>

Quando o Flash constrói esta chamada, automaticamente ele chama o o XML. Ao término do carregamento a variável XMLexterno tera em seu conteúdo o arquivo carregado do servidor. Quando esta variável gana valor, automaticamente todas as suas dependências são actualizadas, e o formulário é preenchido.

Arquivo main01.mxml
<mx:XML id="XMLexterno" source="/code/048/xml/xml01.xml"/>
<mx:Form x="10" y="59">
    <mx:FormItem label="Nome:">
        <mx:TextInput text="{XMLexterno.nome}"/>
    </mx:FormItem>
    <mx:FormItem label="E-mail:">
        <mx:TextInput text="{XMLexterno.email}"/>
    </mx:FormItem>
    <mx:FormItem label="Apelido:">
        <mx:TextInput text="{XMLexterno.apelido}"/>
    </mx:FormItem>
    <mx:FormItem>
        <mx:Button label="Salvar"/>
    </mx:FormItem>
</mx:Form>

Este exemplo acima utilizo sempre que preciso chamar um XML de configuração. Se precisar atualizar este XML, teria que utilizar o exemplo abaixo que utiliza evento de retorno.

Arquivo main02.mxml – Completo
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                layout="absolute"
                backgroundColor="#f6f6f6"
                backgroundGradientColors="[#f6f6f6, #bbbbbb]"
                creationComplete="init()">
    <mx:Script>
        <![CDATA[
            [Bindable]
            private var XMLexterno:XMLList;
            private function init():void
            {
                var request:URLLoader = new URLLoader;
                request.addEventListener(Event.COMPLETE, RecebeXML);
                request.load(new URLRequest(
                    "/code/048/xml/xml01.xml"));
            }
            private function RecebeXML(e:Event):void
            {
                XMLexterno = new XMLList(e.target.data);
            }
        ]]>
    </mx:Script>
    <mx:Form x="10" y="59">
        <mx:FormItem label="Nome:">
            <mx:TextInput text="{XMLexterno.nome}"/>
        </mx:FormItem>
        <mx:FormItem label="E-mail:">
            <mx:TextInput text="{XMLexterno.email}"/>
        </mx:FormItem>
        <mx:FormItem label="Apelido:">
            <mx:TextInput text="{XMLexterno.apelido}"/>
        </mx:FormItem>
        <mx:FormItem>
            <mx:Button label="Salvar"/>
        </mx:FormItem>
    </mx:Form>
</mx:Application>

Veja que aqui é chamado o XML e adicionado um evento para o COMPLETE do carregamento do XML. Quando o evento do carregamento é despachado, a função RecebeXML() é executado e o valor recebido do XML é setado para a variável XMLexterno.

Este ultimo exemplo é idêntico ao anterior, porém o XML é carregado de um código PHP. Quando se carrega XML dinâmico é necessário utilizar evento, pois o Flex Builder tenta validar o PHP, e o mesmo não é um XML válido ante que seja executado pelo servidor.

Arquivo main03.mxml
request.load(new URLRequest("/code/048/xml/xml.php"));

Veja o conteudo do arquivo xml.php:

Arquivo xml/xml.php
<?php
header("Content-Type: application/xml; charset=ISO-8859-1");
/*
 * Created on 13/10/2008
 */
$mysqlHost = "localhost";
$mysqlUser = "blog";
$mysqlPass = "SenhadoDB";
$mysqlDB   = "blog";
$mysql = mysql_connect($mysqlHost, $mysqlUser, $mysqlPass);
mysql_select_db($mysqlDB);

$query = SELECT `user_nicename`, `user_email`, `display_name` FROM `blog_users` WHERE `ID` = 1;
$result = mysql_query($query);
$row = mysql_fetch_array($result);

echo < . ?xml version="1.0" encoding="utf-8"? . >;
?>
<root>
    <nome><?php echo $row[display_name]?></nome>
    <email><?php echo $row[user_email]?></email>
    <apelido><?php echo $row[user_nicename]?></apelido>
</root>

Espero que tenham gosatado deste POST, e o código fonte esta disponível aqui.

Gostou? Não esqueça de curtir!

Ou compartilhe o link com seus amigos

Compartilhar no Facebook Compartilhar no Google Bookmarks Compartilhar no Twitter Compartilhar no LinkedIn

16 comentários

  1. Willian

    Tenho que ler um XML dentro do as deste exemplo, so que nao consigo:.
    http://gmaps-samples-flash.googlecode.com/svn/trunk/demos/AFCVideoSyncMap/srcview/index.html

  2. MARIO VEDDER

    Eduardo Kraus!! tu é o cara.... na moral mesmo todo mundo que pega seus códigos deveria no natal enviar uma "caixinha" pra vc!!!

    obrigado por vc existir!! kkkkkkkkkkk

    show......

  3. Alemão

    @Mario

    Gostei da idéia. Vou colocar meu endereço aqui perto do natal. Vou até colocar um vale Postal. Kkakakakaka

  4. Thiago Pereira

    como faria pra na linha

    request.load(new URLRequest("http://code.mxml.com.br/048/xml/xml.php"));

    eu colocar uma variavel dinamica tipo:

    request.load(new URLRequest("http://code.mxml.com.br/048/xml/xml.php?id="+var));

    sendo q essa variavel viria de um outro swf?

  5. Eduardo Kraus

    @Thiago, como assim, outro SWF?

  6. Thiago Pereira

    tipo tenho um datagrid e botei uma funcao no click da linha pra pegar o id do registro esse id seria passado pra uma planilha de edicao. eu tenho q usar esse id pra carregar os dados na planilha.

    vc sabe como eu poderia fazer isso???

  7. Eduardo Kraus

    Você faz assim:

    IdDoDatagrid.selectItem.id
    ou
    IdDoDatagrid.selectItem.nomeDoCampoQueVemDoBanco

    Simples assim

  8. André Vitor

    Concordo com Mario Vedder, estou correndo atrás de uma explicação de como utilizar Flex com XML , a algum tempo, se não fosse seu blog ...

    Heheh..

    Ideia : Cria uns tutorial básico no Youtube, alguns não precisa ser muito não uns 10 tah bom só pro pessoal ver como você manja, ai Cria um Site para acesso pago ( mas não vai cobrar muito pq se não nu dah pra min bancar também hehe ).. com tutoriais mais avançados ( tipo comunicação com WebService ( bom pra min isso é avançado, mas você que é o cara )).. e pimba .. logo sua Site bomba na net e você descola uma boa renda. hehe

    bom se criar mesmo não deixa de postar no seu blog avisando, fmz Abraços e valeu pela explicação.

  9. Eduardo Kraus

    @André Estou pensando nesta idéia a um bom tempo.

  10. Weslei

    valew!!!!!!!!!!!!muito bom..

  11. Guilherme

    Eduardo, seria possível mostrar como se faz para ler um arquivo xml escolhido pelo usuário sem precisar fazer upload? Ou seja, o usuário escolhe um arquivo xml da máquina dele, a aplicação lê, faz alguma coisa e pronto!

    Obrigado,
    Guilherme

  12. Eduardo Kraus

    Sim, use a mesma técnica usada no POST http://blog.mxml.com.br/compilando-seu-projeto-para-flash-player-10-no-flex-builder-3

  13. Guilherme

    Show, Eduardo! Consegui aqui! Valeu pela ajuda! Abraços!

  14. Rodrigo

    Bom dia,

    Edu, tem como eu salvar os dados digitados em um xml que esteja em um servidor igual do exemplo 1.
    Ao inves de eu ler o xml eu salvar no xml modificando-o.

  15. Eduardo Kraus

    Sim, você pode altera-lo e enviar ao servidor para salvar.

  16. Rodrigo

    como seria esta funcao que faz isso ?

    public function salvaNoServidor():void{
    ...

    }

    ?

Deixe uma resposta