Se esta querendo aprender ou iniciar novos projetos em Flex, clique aqui

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

16 comentários

Deixe uma resposta

  1. como seria esta funcao que faz isso ?

    public function salvaNoServidor():void{
    ...

    }

    ?

     
  2. 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.

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

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

     
  5. 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

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

     
  7. 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.

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

     
  9. 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???

     
  10. Você faz assim:

    IdDoDatagrid.selectItem.id
    ou
    IdDoDatagrid.selectItem.nomeDoCampoQueVemDoBanco

    Simples assim

     
  11. @Thiago, como assim, outro SWF?

     
  12. 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?

     
  13. @Mario

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

     
  14. 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......