Archives for categorie "XML"

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:

Array to XML

  • Share/Bookmark

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())

  • Share/Bookmark

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;
}
  • Share/Bookmark

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;
}
  • Share/Bookmark
Nov
14
Arcadio 1 comment

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.

  • Share/Bookmark
Creative Commons License
This blog is under Creative Commons licence, unless indicated otherwise.
Special thanks to Mark James for the icon set used in this blog.