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

Flex 将xml转成对象

发布时间:2020-12-15 03:46:16 所属栏目:百科 来源:网络整理
导读:刚刚开始学Flex最近有个项目用到了将xml结构用对象来存储起来下面就将我学到的东西贴出来和大家一起分享下不足之处希望多多指点指点^_^ 本文所用到的xml: ?xml version="1.0" encoding="UTF-8"?data value="test"data1 value="test01"id value="test02"/nam

刚刚开始学Flex最近有个项目用到了将xml结构用对象来存储起来下面就将我学到的东西贴出来和大家一起分享下不足之处希望多多指点指点^_^

本文所用到的xml:

<?xml version="1.0" encoding="UTF-8"?>
<data value="test">
	<data1  value="test01">
		<id value="test02"/>
		<name  value="test03"/>
		<des  value="test04"/>
	</data1>
	<data2  value="test05">
		<id  value="test06"/>
		<name value="test07"/>
		<des  value="test08"/>
	</data2>
	<data3 value="test09">
		<id  value="test10"/>
		<name  value="test11"/>
		<des  value="test12"/>
	</data3>
	<data4 value="test13">
		<id  value="test14"/>
		<name value="test15"/>
		<des  value="test16"/>
	</data4>
</data>


(1)首先建立一个存放xml模型类GCNode.as

package test
{
	public class GCNode
	{
		public function GCNode()
		{
		}
		
		public var name:String;
		
		public var pNode:GCNode;
		public var children:Vector.<GCNode>;
	}
}


(2)建立mxml类

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
			   creationComplete="application1_creationCompleteHandler()">
	<s:layout>
		<s:VerticalLayout horizontalAlign="center" verticalAlign="middle"/>
	</s:layout>
	<fx:Declarations>
		<!--url存放xml文件的地址用来填充树 -->
		<s:HTTPService id="hs" url="data/data2.xml" resultFormat="e4x" result="hs_resultHandler(event)"/>
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import mx.rpc.events.ResultEvent;
			[Bindable]
			private var d:XML;

			protected function application1_creationCompleteHandler():void
			{
				hs.send();
			}
			
			public function initTree(pp:XML,Node:GCNode):void
			{
				var tempList:XMLList=pp.children();
				Node.name=pp.@value;
				//如果该节点没有子节点就附个new的list否侧会报空对象
				if(!Node.children){
					Node.children=new Vector.<GCNode>();
				}
				for each(var xml:XML in tempList)
				{
					var tempNode:GCNode=new GCNode();
					tempNode.name=xml.@value;
					tempNode.pNode=Node;
					Node.children.push(tempNode);
					initTree(xml,tempNode)
				}
			}
			//回调函数
			protected function hs_resultHandler(event:ResultEvent):void
			{
				d = event.result as XML;
				var treeNode:GCNode=new GCNode();
				//递归填充treeNode
				initTree(d,treeNode);
				trace(treeNode.name);
			}
		]]>
	</fx:Script>

</s:Application>


最后通过debug模式可以查看该treeNode对象的结构如下图,该对象利用自己的children? list属性存放了子节点利用pNode记住了自己的父节点

(编辑:李大同)

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

    推荐文章
      热点阅读