加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flex xml和arraycollection相互转换

发布时间:2020-12-15 04:24:50 所属栏目:百科 来源:网络整理
导读:flex xml和arraycollection相互转换 (2010-06-04 13:58:17) 转载▼ 标签: it ?? ?分类: Flex 1、arraycollection转化为xml,代码如下: ?? ? ??? view plaincopy to clipboardprint? //动态生成树形结构 ? ? public static function flatArrayToXML(arr:Ob
flex xml和arraycollection相互转换 (2010-06-04 13:58:17) 转载▼ 标签: it ?? ?分类: Flex 1、arraycollection转化为xml,代码如下: ?? ? ??? view plaincopy to clipboardprint? //动态生成树形结构 ? ? public static function flatArrayToXML(arr:Object,rootname:String=null,nodename:String=null,outputString:Boolean=false):Object{ ? ??????????? if (arr is Array){ ? ???????????????? ? ??????????? }else if ( arr is ArrayCollection){ ? ??????????????? arr= ArrayCollection(arr).source; ? ??????????? }else if (arr == null){ ? ??????????????? return null; ? ??????????? } ? ??????????? if (rootname==null) rootname="root"; ? ??????????? var xmlstr:String="<"+rootname+" "+"label='套餐项目'>"; ? ??????????? var xmlList:XMLList=new XMLList(); ? ??????????? var alength:int=arr.length; ? ?? if (alength > 0) ? ?? { ? ??? for (var i:int=0; i < alength; i++) ? ??? { ? ????? xmlstr+=objToSimpXML(arr[i].name,nodename,true);?? ? ????? } ? ????? xmlstr +="</"+nodename+">"; ? ???? } ? ??? } ? ?? } ? ??????????? xmlstr+="</"+rootname+">"; ? ?? trace(xmlstr); ? ??????????? var xmldoc:XMLDocument=new XMLDocument(xmlstr); ? ??????????? if (outputString==true) ? ??????????????? return xmldoc==null ? "": xmldoc.toString(); ? ??????????? var xml:XML=new XML(xmldoc); ? ??????????? return xml; ? ??????? } ? ???????? ? ??????? //将对象转换为简单xml.<node property1='value1'? property2='value2'/>这种形式 ? ??????? //obj转换源对象,仅支持简单对象,如果对象的属性也是一个对象则不进入递归,? ??????? //nodename可以自定义节点名称,默认是"node" ? ??????? //是否输出为字符串,默认转换为xml,如果为true则将xml变为字符串 ? ??????? //return 值类型根据outputString 来决定,可能是XML,可能是String ? ??????? public static function objToSimpXML(ri_name:String,nodeorchild:int,outputString:Boolean=false):String{ ? ??????????? if(ri_name==null) return null; ? ??????????? if (nodename==null)nodename="node";//节点名字 ? ??????????? var str:String="<"+nodename; ? ??????????? str+=" label='"+filterXMLString(ri_name)+"'";节点中属性的名字 ? ??????????? nodeorchild == 1?str+="/>":str+=">"; ? //??????????? var xmldoc:XMLDocument=new XMLDocument(str); ? //??????????? if (outputString==true) return xmldoc==null ? "": xmldoc.toString(); ? //??????????? var xml:XML=new XML(xmldoc); ? ??????????? return str; ? ??????? } ? ??????? //过滤xmlstring,一些不安全字符需要转义,比如 单双引号,左右单箭头等 ? ??????? public static function filterXMLString(str:String):String ? ??????? { ? ??????????? if (str ==null) return ""; ? ??????????? str=str.replace("&","&");//顺序不要改,这个必须是第一个转换 ? ??????????? str=str.replace(">",">"); ? ??????????? str=str.replace("<","<"); ? ??????????? str=str.replace("'","'"); ? ??????????? str=str.replace(""",""); ? ??????????? return str; ? ??????? } ? //动态生成树形结构 ? public static function flatArrayToXML(arr:Object,outputString:Boolean=false):Object{ ??????????? if (arr is Array){ ????????????? ? ??????????? }else if ( arr is ArrayCollection){ ??????????????? arr= ArrayCollection(arr).source; ??????????? }else if (arr == null){ ??????????????? return null; ??????????? } ??????????? if (rootname==null) rootname="root"; ??????????? var xmlstr:String="<"+rootname+" "+"label='套餐项目'>"; ??????????? var xmlList:XMLList=new XMLList(); ??????????? var alength:int=arr.length; ?? if (alength > 0) ?? { ??? for (var i:int=0; i < alength; i++) ??? { ????? xmlstr+=objToSimpXML(arr[i].name,true); ????? } ????? xmlstr +="</"+nodename+">"; ???? } ??? } ?? } ??????????? xmlstr+="</"+rootname+">"; ?? trace(xmlstr); ??????????? var xmldoc:XMLDocument=new XMLDocument(xmlstr); ??????????? if (outputString==true) ??????????????? return xmldoc==null ? "": xmldoc.toString(); ??????????? var xml:XML=new XML(xmldoc); ??????????? return xml; ??????? } ????? ? ??????? //将对象转换为简单xml.<node property1='value1'? property2='value2'/>这种形式 ??????? //obj转换源对象,??????? //nodename可以自定义节点名称,默认是"node" ??????? //是否输出为字符串,如果为true则将xml变为字符串 ??????? //return 值类型根据outputString 来决定,可能是String ??????? public static function objToSimpXML(ri_name:String,outputString:Boolean=false):String{ ??????????? if(ri_name==null) return null; ??????????? if (nodename==null)nodename="node";//节点名字 ??????????? var str:String="<"+nodename; ??????????? str+=" label='"+filterXMLString(ri_name)+"'";节点中属性的名字 ??????????? nodeorchild == 1?str+="/>":str+=">"; //??????????? var xmldoc:XMLDocument=new XMLDocument(str); //??????????? if (outputString==true) return xmldoc==null ? "": xmldoc.toString(); //??????????? var xml:XML=new XML(xmldoc); ??????????? return str; ??????? } ??????? //过滤xmlstring,左右单箭头等 ??????? public static function filterXMLString(str:String):String ??????? { ??????????? if (str ==null) return ""; ??????????? str=str.replace("&",这个必须是第一个转换 ??????????? str=str.replace(">",">"); ??????????? str=str.replace("<","<"); ??????????? str=str.replace("'","'"); ??????????? str=str.replace(""",""); ??????????? return str; ??????? } ? ? ?? 在上面的代码中,只要将arraycollection数据源传入到flatArrayToXML方法就行了,如果要增加节点中的属性,只要在? str+=" label='"+filterXMLString(ri_name)+"'";的label 前面增加你想要的的属性名就行了,上面的“套餐项目”是顶级根节点。 ? 在这里要注意的是,比如说你的客户端组件时tree,那么你用这个方法来生成xml就很麻烦了,这个方法适用于比如你只有1个或者2个子节点的情况,如果有多个节点或者是传过来的数据量大的时候,建议在java后台使用递归方法来生成xml。 ?? 下面还有个简单的arraycollection转化成xml的例子: ? view plaincopy to clipboardprint? <?xml version="1.0" encoding="utf-8"?>?? ? <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12"? creationComplete="init()">?? ? ??? <mx:Style source="style/Smoke.css"/>?? ? ??? <mx:Script>?? ? ??????? <!--[CDATA[?? ? ???????? import mx.collections.ArrayCollection;??????? ? ???????? [Bindable]private var shijxml:XML;?? ? ??????????? ? ????????? private function init():void{?? ? ??????????? shijxml = arrToXml(exams);?? ? ????????? }?? ? ??????????? ? ??????? [Bindable]?? ? ??????? public var exams:ArrayCollection = new ArrayCollection(?? ? ??????????????? [{sjtitle:"数据结构第一章",kemu:"数据结构",shijID:"sj000",num:"30"},??? ? ???????????????? {sjtitle:"数据结构第二章",shijID:"sj001",??? ? ??????????????? {sjtitle:"组成原理第一章",kemu:"组成原理",shijID:"zc000",num:"50"},?????????????????????? ? ??????????????? {sjtitle:"组成原理第二章",shijID:"zc001",num:"30"} ]);?? ? ???????????????????? ? ???????? private function arrToXml(arr:ArrayCollection):XML{?? ? ??????????????? var root:XML = new XML("<root/>");?? ? ??????????????? for(var i:int = 0;i<arr.length;i++){?? ? ??????????????????? var node:XML = new XML("<node/>");?? ? ??????????????????? node.sjtitle = arr[i].sjtitle;?? ? ??????????????????? node.kemu= arr[i].kemu;?? ? ??????????????????? node.shijID= arr[i].shijID;?? ? ??????????????????? node.num= arr[i].num;?? ? ??????????????????? root.appendChild(node);?? ? ??????????????? }?? ? ??????????????? return root;?? ? ??????????? }?? ? ??????????? private function closeHandler(event:Event):void {?? ? ?????????????? show.text="试卷标题: "+ ComboBox(event.target).selectedItem;?? ? ?????????????? var? temp:String=String(ComboBox(event.target).selectedItem);?? ? ?????????????? for each(var xml:XML in shijxml.node){?? ? ??????????????? if(xml.sjtitle==temp){?? ? ??????????????????? show.text="考试科目: "+xml.kemu+"n"+"试卷题数: "+xml.num+"n"+?? ? ??????????????????? "试卷编号: "+xml.shijID;?? ? ??????????????? }?? ? ????????????? }????? ? ??????????? }??????? ? ??????? ]]-->?? ? ??? </mx:Script>?? ? ??? <mx:Panel width="100%" height="100%" layout="absolute" >?? ? ??????? <mx:DataGrid height="100%" width="50%" dataProvider="{exams}">?? ? ??????? </mx:DataGrid>?? ? ??????? <mx:ComboBox y="79" close="closeHandler(event);" dataProvider="{shijxml.node.sjtitle}" right="88"></mx:ComboBox>?? ? ??????? <mx:Text y="111" id="show"? width="185" height="126" right="50"/>?? ? ??? </mx:Panel>?? ? </mx:Application> ? <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12"? creationComplete="init()"> ??? <mx:Style source="style/Smoke.css"/> ??? <mx:Script> ??????? <!--[CDATA[ ???????? import mx.collections.ArrayCollection;???? ? ???????? [Bindable]private var shijxml:XML; ???????? ? ????????? private function init():void{ ??????????? shijxml = arrToXml(exams); ????????? } ???????? ? ??????? [Bindable] ??????? public var exams:ArrayCollection = new ArrayCollection( ??????????????? [{sjtitle:"数据结构第一章",? ???????????????? {sjtitle:"数据结构第二章",? ??????????????? {sjtitle:"组成原理第一章",??????????????????? ? ??????????????? {sjtitle:"组成原理第二章",num:"30"} ]); ????????????????? ? ???????? private function arrToXml(arr:ArrayCollection):XML{ ??????????????? var root:XML = new XML("<root/>"); ??????????????? for(var i:int = 0;i<arr.length;i++){ ??????????????????? var node:XML = new XML("<node/>"); ??????????????????? node.sjtitle = arr[i].sjtitle; ??????????????????? node.kemu= arr[i].kemu; ??????????????????? node.shijID= arr[i].shijID; ??????????????????? node.num= arr[i].num; ??????????????????? root.appendChild(node); ??????????????? } ??????????????? return root; ??????????? } ??????????? private function closeHandler(event:Event):void { ?????????????? show.text="试卷标题: "+ ComboBox(event.target).selectedItem; ?????????????? var? temp:String=String(ComboBox(event.target).selectedItem); ?????????????? for each(var xml:XML in shijxml.node){ ??????????????? if(xml.sjtitle==temp){ ??????????????????? show.text="考试科目: "+xml.kemu+"n"+"试卷题数: "+xml.num+"n"+ ??????????????????? "试卷编号: "+xml.shijID; ??????????????? } ????????????? }?? ? ??????????? }???? ? ??????? ]]--> ??? </mx:Script> ??? <mx:Panel width="100%" height="100%" layout="absolute" > ??????? <mx:DataGrid height="100%" width="50%" dataProvider="{exams}"> ??????? </mx:DataGrid> ??????? <mx:ComboBox y="79" close="closeHandler(event);" dataProvider="{shijxml.node.sjtitle}" right="88"></mx:ComboBox> ??????? <mx:Text y="111" id="show"? width="185" height="126" right="50"/> ??? </mx:Panel> </mx:Application> ? ? ?? 2、xml转化为arraycollection,代码如下: 主程序代码: view plaincopy to clipboardprint? <?xml version="1.0" encoding="utf-8"?>?? ? <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">?? ? ??? <mx:Script>?? ? ??????? <!--[CDATA[?? ? ??????? import mx.collections.ArrayCollection;?? ? ??????? import mx.rpc.events.ResultEvent;?? ? ??????? import mx.utils.ObjectProxy;?? ? ?????????? ? ??????? [Bindable]?? ? ??????? private var list:ArrayCollection=new ArrayCollection();?? ? ?????????? ? ??????? private function resultHandler(event:ResultEvent):void {?????????? ? ??????????? if(event.result.store.book is ObjectProxy){?? ? ??????????????? list.removeAll();?? ? ??????????????? list.addItem(event.result.store.book);?? ? ??????????? }?? ? ??????????? else?? ? ??????????????? list=event.result.store.book;?? ? ?????????????????? ? ??????????? booksGrid.dataProvider=list;?? ? ??????? }?? ? ?????????? ? ??????? ]]-->?? ? ??? </mx:Script>?? ? ??? <mx:HTTPService id="booksXML" url="data/book_store.xml" showBusyCursor="true" result="resultHandler(event)"/>?? ? ??????? ? ??? <mx:Button label="读取资料" click="this.booksXML.send()"/>?? ? ??? <mx:DataGrid id="booksGrid" width="600" height="400">?? ? ??????? <mx:columns>?? ? ??????????? <mx:DataGridColumn headerText="编号" dataField="id" width="30"/>?? ? ??????????? <mx:DataGridColumn headerText="书名" dataField="bookname"/>?? ? ??????????? <mx:DataGridColumn headerText="分类" dataField="category" width="80"/>?? ? ??????????? <mx:DataGridColumn headerText="售价" dataField="sprice" width="60"/>?? ? ??????????? <mx:DataGridColumn headerText="特价" dataField="sale" width="60"/>?? ? ??????? </mx:columns>?? ? ??? </mx:DataGrid>?? ? </mx:Application>?? ? <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"> ??? <mx:Script> ??????? <!--[CDATA[ ??????? import mx.collections.ArrayCollection; ??????? import mx.rpc.events.ResultEvent; ??????? import mx.utils.ObjectProxy; ??????? ? ??????? [Bindable] ??????? private var list:ArrayCollection=new ArrayCollection(); ??????? ? ??????? private function resultHandler(event:ResultEvent):void {??????? ? ??????????? if(event.result.store.book is ObjectProxy){ ??????????????? list.removeAll(); ??????????????? list.addItem(event.result.store.book); ??????????? } ??????????? else ??????????????? list=event.result.store.book; ??????????????? ? ??????????? booksGrid.dataProvider=list; ??????? } ??????? ? ??????? ]]--> ??? </mx:Script> ??? <mx:HTTPService id="booksXML" url="data/book_store.xml" showBusyCursor="true" result="resultHandler(event)"/> ???? ? ??? <mx:Button label="读取资料" click="this.booksXML.send()"/> ??? <mx:DataGrid id="booksGrid" width="600" height="400"> ??????? <mx:columns> ??????????? <mx:DataGridColumn headerText="编号" dataField="id" width="30"/> ??????????? <mx:DataGridColumn headerText="书名" dataField="bookname"/> ??????????? <mx:DataGridColumn headerText="分类" dataField="category" width="80"/> ??????????? <mx:DataGridColumn headerText="售价" dataField="sprice" width="60"/> ??????????? <mx:DataGridColumn headerText="特价" dataField="sale" width="60"/> ??????? </mx:columns> ??? </mx:DataGrid> </mx:Application> ? ? ??? ? ? data/book_store.xml: view plaincopy to clipboardprint? <?xml version="1.0" encoding="utf-8"?>?? ? <store>?? ? ? <store_title>我的书店</store_title>?? ? ? <store_telephone>0411-12345678</store_telephone>?? ? ? <store_address>大连市高新园区新华路60号</store_address>?? ? ? <book id="1" category="Web 开发">?? ? ??? <bookname>Getting Start with Flex</bookname>?? ? ??? <sprice>49.9</sprice>?? ? ??? <sale>45.9</sale>?? ? ? </book>?? ? </store>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读