import flashx.textLayout.elements.OverflowPolicy;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.utils.ObjectUtil;
[Bindable]
private var myAC:ArrayCollection = new ArrayCollection([
{
NodeName:"Node1",
tt:"a",
label:"请选择",
mname:new ArrayCollection([
{NodeName:"Node2",aa:"请选择",bb:"111"},{aa:"bbb",bb:"111"}
])
}
,{
NodeName:"Node1",
tt:"b",
label:"请选择bb",
mname:new ArrayCollection([
{NodeName:"Node2",aa:"请选择bb",bb:"111bb"},{NodeName:"Node2",aa:"bbb44",bb:"111bb"}
])
}
]);
private function test():void{
var obj:Dictionary = new Dictionary();
obj["tt"]="";
Alert.show(ArrayCollectionToXml(myAC,obj).toXMLString());
}
/**
* 方法说明 : ArrayCollection转换成XML
*
* mResult : 需要转化的ArrayCollection,ArrayCollection中的每个实体
* 必需包含NodeName属性转化时作为其实体节点名称,
*
* mFilterProperties : 转化过程中不需要转化的节点
* */
public function ArrayCollectionToXml(mResult:ArrayCollection,mFilterProperties:Dictionary=null):XML{
var root:XML = <root/>;
if(mFilterProperties==null){
mFilterProperties = new Dictionary();
mFilterProperties["NodeName"]="";
}else{
mFilterProperties["NodeName"]="";
}
xmlAppendNode(root,mResult,mFilterProperties);
return root;
}
/**
* 循环增加XML节点
* */
private function xmlAppendNode(mRoot:XML,mResult:ArrayCollection,mFilterProperties:Dictionary=null):void
{
if(mResult ==null || mResult.list.length<1){return;}
var properties:Array;
properties = ObjectUtil.getClassInfo(mResult[0])["properties"] as Array;
var nodeName:String;
if(mResult[0]["NodeName"]==null){
nodeName = "Node";
}else{
nodeName = mResult[0]["NodeName"];
}
for(var i:int=0;i<mResult.list.length;i++){
var str:String = "<"+nodeName+">"+"</"+nodeName+">";
var node:XML = new XML(str);
for(var j:int = 0;j<properties.length;j++){
if(mFilterProperties[properties[j]["localName"]]==null){
if(eqType(mResult[i][properties[j]["localName"]],mResult)){
var str1:String = "<"+properties[j]["localName"]+">"+"</"+properties[j]["localName"]+">";
var node1:XML = new XML(str1);
node.appendChild(node1);
xmlAppendNode(node1,mResult[i][properties[j]["localName"]],mFilterProperties);
}else{
node[properties[j]["localName"]] = mResult[i][properties[j]["localName"]];
}
}
}
mRoot.appendChild(node);
}
}
/**
* 对比对象类型*
* */
private function eqType(a:Object, b:Object):Boolean
{
return a === b || describeType(a).@name == describeType(b).@name;
}