Se não me engano, para esse ultimo exemplo que vc colocou:
"(minha_var = meuxml.node.conteudo)... ou (meuxml.node.conteudo =
minha_var )"
o "=" deve trabalhar com Strings para ambos os lados. (sem ser em
base64, strings puras do AS mesmo)
Agora o que rola exatamente dentro da classe XML do flex... aí eu
já não posso te ajudar hehe
Só uma outra idéia rápida: Quem sabe o que vc precisa não seja
extender um HttpService e fazer nele a conversao do XML inteiro
recebido? Aliás... um HttpService já usa umas conversões lá e deixa vc
setar qual vc quer (acho que já passei por um treco desses uma vez
navegando pelo codigo fonte do flex)
Enfim... a ideia seria vc converter e desconverter o XML inteiro
assim que recebesse/enviasse.
boa sorte aí,
- Luís
Em 24/07/2011 09:30, Wemerson Couto Guimarães escreveu:
Caetano, ops... @Luiz Eduardo... (Ou não né?) rs....
Então, a questão das strings... já me derrubou com isso... não dá pra
ficar fazendo cast toda hora... vai poluir o código.
Eu tava querendo fazer isso direto já no "=", ou seja... no momento
que um valor é requisitado ou setado... (minha_var =
meuxml.node.conteudo)... ou (meuxml.node.conteudo = minha_var )
justamente pra dar um ar mais "elegante", sem precisar de funções
extras expostas para fazer isso..
Mas pelo jeito o mais correto aqui seria criar funções internas na
classe para set/get dos valores...
Só uma dúvida:
No momento que seta um valor para um xml atraves do "=", o que é
executado dentro da classe XML?
Em 24 de julho de 2011 04:32, Luis Eduardo <[email protected]
<mailto:[email protected]>> escreveu:
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] <mailto:[email protected]>
Para sair da lista, envie um email em branco para
[email protected]
<mailto:[email protected]>
Mais opções estão disponíveis em
http://groups.google.com/group/flexdev
--
*Wemerson Guimarães*
Rio Verde - Go
--
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
--
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