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