刚刚开始学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记住了自己的父节点