Function to convert an Array (of objects) in XML:
private function ArrayToXML(miArray:Object, miXML:XML=null):XML {
if (miXML==null) {
var miXML:XML=new XML(<raiz/>);
}
for (var prop:String in miArray) {
if (ObjectUtil.isSimple(miArray[prop])) {
miXML.appendChild("<"+prop+">" + miArray[prop] + "</"+prop+">");
} else {
var hijos:XML=new XML("<"+prop+"/>");
miXML.appendChild(ArrayToXML(miArray[prop],hijos));
}
}
return miXML;
}
Following array:
private var miArray:Array = new Array(
{
nombre: 'Adobe Flex',
version: '2.0.1',
caracteristicas: {
idioma: 'español',
ides: {
aplicacion:'FlexBuilder',
plugin:'eclipse'
}
}
}
);
Alert.show(ArrayToXML(miArray[0],new XML(<flex/>)).toXMLString());
show this result:

Function to convert a XML into an Array of Objects:
private function XMLtoArray(nodo:XML, miArray:Array=null):Array {
var nombre:String;
var valor:String;
var obj:Object;
var objNodo:Object=new Object();
if (miArray==null) {
var miArray:Array=new Array();
}
// Nombre nodo
objNodo.nombre=nodo.name();
// Recorrer atributos
var atributos:Array=new Array()
for (var i:int=0;i<nodo.attributes().length();i++) {
nombre = nodo.attributes()[i].name();
valor = nodo.attributes()[i]
obj=new Object();
obj[nombre]=valor;
atributos.push(obj)
}
if (atributos.length>0) {
objNodo.atributos=atributos;
}
// Añadir texto
if (nodo.text().toString()!="") {
objNodo.texto=nodo.text();
}
if (nodo.nodeKind()!='text') {
miArray.push(objNodo);
}
// Recorrer hijos
if (nodo.children().length()>0 && nodo.nodeKind()!='text') {
for (var j:int=0;j<nodo.children().length();j++) {
if (nodo.children()[j].nodeKind()!='text') {
// Añadir hijos
objNodo.hijos=XMLtoArray(nodo.children()[j],null);
}
}
}
// Recorrer nodos
return miArray;
}
To access at object names must be indicated the array position. For example, to obtain first node name of an XML we’ll do: XMLtoArray(miXML.children()[0])[0].nombre.toString())
Function to convert an ActionScript Object to XML using SimpleXMLEncoder class from package mx.rpc.xml.
public function objectToXML(miObj:Object):XMLDocument {
var miXML:XMLDocument = new XMLDocument();
var codec:SimpleXMLEncoder= new SimpleXMLEncoder(miXML);
var node:XMLNode = codec.encodeValue(miObj, new QName("XML"), miXML);
return miXML;
}
Function to convert an XML ActionScript to Object using SimpleXMLDecoder class from package mx.rpc.xml.
public function xmlToObject(miXML:XML):Object {
var result:XMLDocument = new XMLDocument();
result.ignoreWhite = true;
result.parseXML(miXML);
var decodec:SimpleXMLDecoder= new SimpleXMLDecoder();
var obj:Object=decodec.decodeXML(result);
return obj;
}
Function to filter XML duplicate entries in Flex by criterion.
Result is an XMLList with the non duplicate element list.
public function filtrarResultados(lista:XMLList, criterio:String, atributo:Boolean):XMLList {
var resultado:XML=new XML(<filtro/>);
for (var i:int=0;i<lista.length();i++) {
var valor:String;
var existe:Boolean;
// Comprobar si está el valor en la lista de 'resultado'
if (atributo) {
valor=lista[i].@[criterio];
existe=resultado.descendants().(hasOwnProperty("@"+criterio) && @[criterio]==valor).toXMLString()!="";
} else {
valor=lista[i].child(criterio);
existe=resultado.descendants().(hasOwnProperty(criterio) && [criterio]==valor).toXMLString()!="";
}
if (!existe) {
resultado.appendChild(lista[i]);
}
}
return resultado.children();
}
The elementes are added by order.