ArrayCollection转XML

 

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           :  需要转化的ArrayCollectionArrayCollection中的每个实体

            *                      必需包含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;

           }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值