Oi Carolina,

Eu coloquei o xml dentro da aplicação pq achei mais rápido pra fazer o código de exemplo. Mas isso pode ser facilmente alterado por vc. No caso o meu xml embutido é o equivalente ao seu XMLTree que vc popula na função setXML(). Do ponto de vista dos componentes do flex não importa de onde vem o xml: se é embutido na aplicação, se é gerado dinamicamente, se vem de URLLoader, HTTPServices, WebServices, RemoteObjects ou arquivo externo, entende?

    Os pontos chaves que vão ser úteis a você são:
    -1 usar a função "change" do combo
    -2 pegar o tem selecionado com a propriedade "selectedItem"
    -3 fazer casting de volta para xml
-4 trabalhar o xml com E4X pra minerar os dados que vc precisa formando um novo xml
    -5 e popular o xmllistcollection do tree com esse novo xml

Usando essa lógica podem haver quantos combos intermediários vc precisar. É só repetir pra cada combo os passos de 1 a 4. Você rodou o código da aplicação que eu enviei? O único problema com aquele código era somente o fato do xml estar embutido?

    abraços,
    - Luís


Em 22/12/2011 08:42, Carolina Duval escreveu:
Gente, o XML não pode estar na aplicação,
ele tem que ser externo para ser alterado posteriormente com mais
netos,
eu usei httpservices para buscar o xml externo e ficou assim:

[Bindable]
private var XMLTree:XML;

private function init():void
                        {
                        var request:URLLoader = new URLLoader();
                        request.addEventListener(Event.COMPLETE, setXML);
                        request.load(new URLRequest("../assets/Content.xml"));
                        }

                        public function setXML(e:Event):void
                        {
                        XMLTree = new XML(e.target.data);
                         }


e populei os combos que preciso assim:
<s:DropDownList id="drop1" labelField="@label">
<s:dataProvider>
        <s:XMLListCollection source="{XMLTree.noinicial}"/>
</s:dataProvider>
</s:DropDownList>

porque o DropDownlis so aceita "xlist" e o resultado do urlrequest não
é "xlist" por isso usei desta forma

ate então esta parte esta funcionando, os meu combos estão todos sendo
preenchidos,
quando seleciono o ultimo combo ele deveria passar o valor do item
combo selecionado mais o item da frente que não esta funcionando,

o tree esta assim:

<mx:Tree id="tree" dataProvider="drop1*.selectedItem.nofilhos"<!--
*Aqui no caso vai o ultimo combo-->
labelField="@label" />  nesta tree deveria aparecer os filhos com seus
filhos<-(netos no caso), entenderam.

On Dec 22, 8:02 am, Rogerio Gonzalez<rogerio.gonza...@gmail.com>
wrote:
boa Luis,

se redimiu!

hehehehe :P

Abraços

Rogério

2011/12/21 Luis Eduardo<ledua...@suprasis.com.br>









    Agora é ooooooutra coisa! hehe
    Tá bom Rogério, só pq vc falou que eu estou pegando pesado segue um
código prontinho que resolve o que eu entendi do problema.
    Carolina, veja se realmente é isso mesmo.
    (De qualquer forma dê uma lida nos links que te passei pra manipulação
com E4X pq isso vai te ajudar um tanto quando lidar com XML.)
    Fico no aguardo pra saber fechou.
    abraços,
    - Luís
----------------------------<?**xml version="1.0" encoding="utf-8"?>
<s:Application 
xmlns:fx="http://ns.adobe.com/**mxml/2009<http://ns.adobe.com/mxml/2009>
"
               
xmlns:s="library://ns.adobe.**com/flex/spark<http://ns.adobe.com/flex/spark>
"
               
xmlns:mx="library://ns.adobe.**com/flex/mx<http://ns.adobe.com/flex/mx>"
minWidth="955" minHeight="600">
<fx:Declarations>
<s:XMLListCollection id="xmllcCombo" source="{xmll.noinicial}"/>
<s:XMLListCollection id="xmllcTree"/>
<fx:XMLList id="xmll">
<content>
<noinicial label="primeiro no">
<nofilho label="filho1">
<noneto label="neto1.1"/>
<noneto label="neto1.2"/>
<noneto label="neto1.3"/>
</nofilho>
</noinicial>
<noinicial label="segundo no">
<nofilho label="filho2.1">
<noneto label="neto2.1"/>
<noneto label="neto2.2"/>
<noneto label="neto2.3"/>
</nofilho>
</noinicial>
</content>
</fx:XMLList>
</fx:Declarations>
<fx:Script>
<![CDATA[
            import mx.collections.**XMLListCollection;
            import spark.events.IndexChangeEvent;
            protected function mudaTree(event:**IndexChangeEvent):void {
                var cb:ComboBox = event.currentTarget as ComboBox;
                var xmltemp:XML = XML(cb.selectedItem).copy();
                xmllcTree.removeAll();
                xmllcTree.source = xmltemp.nofilho;
            }
        ]]>
</fx:Script>
<s:ComboBox x="100" y="100" change="mudaTree(event)"
dataProvider="{xmllcCombo}" prompt="Selecione..." labelField="@label"/>
<mx:Tree id="secoia" x="100" y="200" width="300" height="400"
dataProvider="{xmllcTree}" labelField="@label" />
</s:Application>
------------------------------**------------------------------**
------------------------------**-------
Em 21/12/2011 15:59, Carolina Duval escreveu:
  Na vardade, obter o xml externo eu consigo, tanto com httpservices ou
com URLoader
e consigo colocar seus valores dentro do combobox, o que não consigo é
pegar o filtro
que estou fazendo com o combobox para acessar o nó especifico do xml;
Exemplo:
Tenho esse xml a titulo de exemplo
<content>
   <noinicial label="primeiro no">
     <nofilho label="filho1">
        <noneto label="neto1.1"/>
        <noneto label="neto1.2"/>
        <noneto label="neto1.3"/>
     </nofilho>
   </noinicial>
   <noinicia label="segundo no">
     <nofilho label="filho2.1">
         <noneto label="neto2.1"/>
        <noneto label="neto2.2"/>
        <noneto label="neto2.3"/>
     </nofilho>
   </noinicial>
</content>
no combobox eu escolho qual o nó inicial,
ai então carrega a tree com a pasta filho e os nos netos.
estou carregando o xml assim:
[Bindable]
                        private var XMLTree:XML;
                        private function init():void
                        {
                        var request:URLLoader = new URLLoader();
                        request.addEventListener(**Event.COMPLETE,
setXML);
                        request.load(new URLRequest("../assets/Content.**
xml"));
                        }
                        public function setXML(e:Event):void
                        {
                        XMLTree = new XML(e.target.data);
                        }
ai no combo coloco o dataprovider
<s:dataProvider>
     <s:XMLListCollection source="{XMLTree.noinicial}"/>
</s:dataProvider>
  no proximo combo coloco
<s:dataProvider>
     <s:XMLListCollection source="{ID_combo1.**selectedItem.nofilho}"/>
</s:dataProvider>
os labelField estão @label ate então OK
mas na hora de popular a tree com o resultado dos combos é que esta
com problema
pois não esta aceitando ID_combo.selectedItem.noneto.
este é o problema.
Obrigado Rogerio e Luiz
On Dec 21, 4:32 pm, Rogerio 
Gonzalez<rogerio.gonza...@**gmail.com<rogerio.gonza...@gmail.com>
wrote:
Poxa Luis,
Dá uma folga pra Carolina. A maior parte dos cursos considera E4X como
"Advanced" hehehe.
Sobre a carga de arquivos externos, vc pode usar o httpservice com o
resultFormat setado como object.
Desta forma, o seu XML externo já vai ser carregado no httpservice e vc
poderá acessá-lo como um objecto as3 normal, usando o lastResult.
Acredito q deva ter algum exemplo na documentacao usando tree com object
vindo de um httpservice.
Agora, se vc realmente quer usar XML no flex, ai o caminho é E4X mesmo.
Abraços
Rogério Gonzalez
2011/12/21 Luis Eduardo<ledua...@suprasis.com.**br<ledua...@suprasis.com.br>
     Carolina,
    Você está fazendo duas coisas erradas ao mesmo tempo:
    1) Não gastou um tempinho pra estudar direito como funciona E4X no
actionscript
    2) Sua pergunta está genérica demais.
    Recomendo tentar de novo primeiro passando pelo item 1 e depois pelo
2.
    Para o item 1, um bom ponto de partida são esses dois links:
    
http://livedocs.adobe.com/****flex/3/html/help.html?content=****<http://livedocs.adobe.com/**flex/3/html/help.html?content=**>
13_Working_with_XML_03.html<ht**tp://livedocs.adobe.com/flex/**
3/html/help.html?content=13_**Working_wi..<http://livedocs.adobe.com/flex/3/html/help.html?content=13_Working_wi..>
.>
    http://www.flexao.net/2009/06/****manipulando-xml-no-flex-com-**
**e4x.html<http://www.flexao.net/2009/06/**manipulando-xml-no-flex-com-**e4x.html>
<http://www.flexao.**net/2009/06/manipulando-xml-**no-flex-com-e4x.html<http://www.flexao.net/2009/06/manipulando-xml-no-flex-com-e4x.html>
    Para o item 2, um pouco de código-fonte já ajuda bastante pra gente
entender melhor onde foi que vc teve dificuldade.
    É que existem varias maneiras de acessar um xml externo e várias
maneiras de mostrá-lo.
    abraços,
    - Luís Eduardo.
Em 21/12/2011 12:27, Carolina Duval escreveu:
  Alguém sabe como acessar um xml externo e colocar um no especifico
para mostrar no tree.
--
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para flexdev-unsubscribe@
**
googlegroups.com<flexdev-**unsubscr...@googlegroups.com<flexdev-unsubscribe 
@googlegroups.com>
Mais opções estão disponíveis emhttp://groups.google.com/****
group/flexdev<http://groups.google.com/**group/flexdev><http://groups.
**google.com/group/flexdev<http://groups.google.com/group/flexdev>>
--
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para flexdev-unsubscribe@**
googlegroups.com<flexdev-unsubscr...@googlegroups.com>
Mais opções estão disponíveis 
emhttp://groups.google.com/**group/flexdev<http://groups.google.com/group/flexdev>

--
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para 
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev

Responder a