Atribuição dinamica de atributo XML

5 views
Skip to first unread message

Marcello Fontolan

unread,
Oct 14, 2008, 10:50:29 PM10/14/08
to fle...@googlegroups.com
Pessoal,

Por exemplo, tenho uma variavel String com o conteúdo "usuario".
Existe (imagino que sim) forma de atribuir um atributo xml usando o
valor da variável?

Exemplo (considerando que o & seria o caracter especial para isto)

var nomeCampo:String = "usuario";
xmlList.&nomeCampo = "João da Silva";
nomeCampo = "endereco";
xmlList.&nomeCampo = "Rua das Laranjeiras, 100";

Minha lista...

xmlList.usuario = "João da Silva"
xmlList.endereco = "Rua das Laranjeiras, 100"

abraços,

Marcello

Beck Novaes

unread,
Oct 15, 2008, 7:48:21 AM10/15/08
to flexdev
Basicamente você pode fazer assim:

var nomeCampo:String;
var node:XML;

var myXML:XML = <usuarios></usuarios>;

nomeCampo = "usuario";
node = <{nomeCampo}/>;
myXML.appendChild(node);

nomeCampo = "endereco";
node = <{nomeCampo}/>;
myXML.appendChild(node);

/* Resultado:
<usuarios>
<usuario/>
<endereco/>
</usuarios>
*/

Um exemplo funcional um pouco mais avançado transforma uma lista de
objetos em XML:

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
initialize="initializeHandler(event)">

<mx:Script>
<![CDATA[
import mx.events.FlexEvent;

[Bindable]
private var myXML:XML;

private function initializeHandler(event:FlexEvent):void
{
var users:Array = [{name:"Beck Novaes",
email:"beck....@gmail.com"},
{name:"Albert Einstein", email:"eins...@gmail.com"},
{name:"Bill Gates", email:"bill...@apple.com"},
{name:"Steve Jobs", email:"jo...@microsoft.com"}];

myXML = createUsersXML(users);

trace(myXML);

}

/**
* Pega um objeto da lista no formato:
* {name:"Beck Novaes", email:"beck....@gmail.com"}
*
* E retorna um XML do objeto no formato:
* <users>
* <user>
* <email>
* beck....@gmail.com
* </email>
* <name>
* Beck Novaes
* </name>
* </user>
* </users>
*/
private function createUsersXML(users:Array):XML
{

var usersXML:XML = <users></users>;

for each (var user:Object in users)
{
var userNode:XML = <user></user>;
for (var property:String in user)
{
userNode.appendChild(<{property}>{user[property]}</{property}>);
}
usersXML.appendChild(userNode);
}

return usersXML;
}

]]>
</mx:Script>

</mx:Application>


O segredo é esquecer o que você conhecer de manipulação de XML nas
outras tecnologias. O ActionScript 3 tem um negócio chamado E4X -
Ecma for XML. E isto muda um pouco a maneira de trabalhar com XML no
Flex. De fato, temos algo muito mais poderoso que pouca gente tira
proveito. Saiba mais em:
http://livedocs.adobe.com/flex/3/html/help.html?content=13_Working_with_XML_01.html


[]'s
Beck Novaes
Reply all
Reply to author
Forward
0 new messages