Oi Wemerson,

Cara... o problema me parece ser puramente algorítmico e não tecnológico. (digo.. a tecnologia pra fazer isso vc já tem pronta, tratar xml em flex puro). Veja se um algoritmo assim pode te dar umas idéias pra resolver esse pipino:

supondo que o XML que chega do back-end tenha apenas filhos de um nível (ou seja, <root><noum></noum><nodois></nodois>...</root>):

-------------------------------------
...para cada nó fazer:
......para cada atributo do nó fazer:
.........checa se o objeto que receberá o valor tem o nó/atributo (essa parte poderia ser pulada no caso de vc querer setar um valor via dicionário no objeto automaticamente
.........cria/seta o valor no objeto source com o valor do base64encode()
------------------------------------
se o objeto destino for um Object, é só setar a variável na tóra (pq Object é igual Dictionary pra setar variável "on the fly"). Mas vc corre o risco de dar pau dependendo do que vier no XML e dependendo do que é o Object destino e de como vc o usa.

supondo que o XML do back-end possa ter hierarquia (filhos dos filhos), aí vc vai precisar de uma função recursiva que recebe como parametro o Object e um nó XML a ser digerido.
---------------------------------
função digere(Object obj, XML xml) {
...para cada nó do xml fazer:
......para cada atributo do nó fazer:
.........checa se o objeto que recebera o valor tem o nó/atributo (essa parte poderia ser pulada no caso de vc querer setar um valor via dicionario no objeto automaticamente
.........cria/seta o valor no objeto source com o valor do base64encode()
......digere(obj, xml.filhos) (ou seja, chama a propria funcao digere passando a lista de filhos do nó atual. Assim vc vai andar pela árvore digerindo ela.)
}

e depois para chamar essa funcao faz
...para cada nó desse mesmo nivel do XMLList (q provavelmente vai ser o root a primeira vez) fazer:
......digere(obj, xml);
---------------------------------

Em C++ existe a sobrecarga de operadores, não me lembro com certeza se ActionScript tb tem isso (acho q sim), já faz um tempo que não programo em flex. De qualquer forma usando a sobrecarga de operadores iria só dar um ar mais profissional mas no final das contas vc ia precisar fazer quase o mesmo código de "digestão" na definição da sobrecarga.

Uma última observação: trabalhar do jeito que vc quer, todas as variaveis serão sempre Strings, correto? se chegar um valor no XML de -23.45 ele será substituido pela string "-23.45" no objeto destino. Idem para booleanos e afins. Isso pode te dar o trabalho de ter que ficar fazendo cast por todo o codigo quando vc for usar a variavel, o que seria provavelmente um trabalho até maior do que tratar na mão a conversão acima. A solução nesse caso seria de trazer junto com o valor o tipo dele e assim vc poderia fazer um casting automatico la na funcao digere()... Mas no final das contas vc vai estar implementando na unha, tudo de novo, o que o AMF já faz com a serialização e deserialização de objetos. Como dizia Mopheus do matrix: "I will show you how deep the rabbit hole goes". ;)

Bom... só pra não terminar o email de forma tão pessimista... se teu XML que chegar for simples e se vc já for usar as variáveis sempre como string pelo resto do código... então só o primeiro bloquinho de código ja deve te resolver o problema hehe

(ou não)


abraços,
- Luís



Em 20/07/2011 17:44, Wemerson Couto Guimarães escreveu:
Opa... nenhum... só flex 3 direto.

Todos os nomes de nodes e os labels devem permanecer inalterados... só quero alterar o conteúdo..

só que em vez de fazer algo do tipo: meuxml.node.valor = base64encode('meu valor'), ou meuxml.node.@label = base64encode('meu valor')...

Fazer a atribuição de valores direta, e a classe xml extendida já fazer a conversão internamente... algo como:

meuxml_extendido.node.valor = 'meu valor', ou meuxml_extendido.node.@label = 'meu valor'...

no uso da aplicação seria transparente, pois os valores ao serem setados são codificados e quando precisarem ser mostrados, seriam decodificados... o detalhe mesmo seria só na hora de gravar esse xml no disco para que o mesmo ficasse armazenado nos meus arquivos xml com os valores codificados...




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

Responder a