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

Flex As3 解析XML文件(下:个人程序代码标记)

发布时间:2020-12-15 04:39:06 所属栏目:百科 来源:网络整理
导读:在上一篇文章中我已经说明了使用Flex As3处理XML文件的基本方法,下面就本人所写过的程序,作下代码标记。 1.XML文件的读取部分此处不再详述; 2.具体XML文件解析 在上一篇文章中的onFileComplete函数中调用了myDrawBoard.ParseFromXml()函数,具体的parseFro

在上一篇文章中我已经说明了使用Flex As3处理XML文件的基本方法,下面就本人所写过的程序,作下代码标记。

1.XML文件的读取部分此处不再详述;

2.具体XML文件解析

在上一篇文章中的onFileComplete函数中调用了myDrawBoard.ParseFromXml()函数,具体的parseFromXml函数的代码如下:

public function ParseFromXml(iXML:XML): void{
			this.Clear();
			parseNode(iXML);
			parseRoute(iXML);
		}

对于这段代码:

1).首先说明myDrawBoard函数式程序中个人封装的类,继承于Canvas,主要用于实现相关流程图形的绘制;

2).调用this.Clear()清空所有Canvas上现在存在的图形;

3).parseNode()用于解析控件节点;

4).parseRoute()用于解析路由线对象;

3.parseNode(iXML:XML)函数

//解析节点信息
		public function parseNode(iXML:XML):void
		{
			var newElementClass : Class
			var myelement:Element;
         	var domain : ApplicationDomain = ApplicationDomain.currentDomain;
         	var elementName:String="";
         	var i:int;
         	//先解析Node节点
         	//获得当前节点的ID值(唯一属性)序列
         	var comList:XMLList=iXML.Node.attribute("ID");
			for each (var comXml:XML in comList) {
				var currId:String=comXml.toString();
				var tmpAttrList:XMLList=iXML.Node.(@ID==currId);
				//Alert.show(tmpAttrList);
				
				//读出当前ID值节点的属性序列
				//var tmpAttrList:XMLList=iXML.Node.(@ID==currId).attributes();
				//构造当前解析节点所需的XML
				for each (var tmpXml:XML in tmpAttrList)
				{
					//Alert.show(tmpXml);
					elementName="wf."+tmpXml.@type;
				
	            	if(domain.hasDefinition(elementName))
	           		 {
	            		//动态创建类对象
                    	newElementClass = domain.getDefinition(elementName) as Class;
                    	myelement = new newElementClass(this,tmpXml);
                    	//绘制当前节点
                    	if(myelement is EndNode)
                    	{
                    		var endNode:EndNode=myelement as EndNode;
                    		endNode.Draw(tmpXml.@x,tmpXml.@y);
                    	}
                    	if(myelement is BeginNode)
                   		 {
                    		var beginNode:BeginNode=myelement as BeginNode;
                    		beginNode.Draw(tmpXml.@x,tmpXml.@y);
                    	}
                   		if(myelement is ForkNode)
                    	{
                    		var forkNode:ForkNode=myelement as ForkNode;
                    		forkNode.Draw(tmpXml.@x,tmpXml.@y);
                    	}
                    	if(myelement is JoinNode)
                    	{
                    		var joinNode:JoinNode=myelement as JoinNode;
                    		joinNode.Draw(tmpXml.@x,tmpXml.@y);
                    	}
                    	if(myelement is TaskNode)
                    	{
                    		var taskNode:TaskNode=myelement as TaskNode;
                    		taskNode.Draw(tmpXml.@x,tmpXml.@y);
                    		}
                    	if(myelement is WorkNode)
                    	{
                    		var workNode:WorkNode=myelement as WorkNode;
                    		workNode.Draw(tmpXml.@x,tmpXml.@y);
                    	}
	            	}
				}
			}
		}

4.parseRoute(iXML:XML)函数

//解析路由线
		public function parseRoute(iXML:XML):void
		{
			var routeList:XMLList=iXML.Route.attribute("ID");
			for each (var routeXml:XML in routeList)
			{
				//Alert.show(routeXml);
				var routeId:String=routeXml.toString();
				//读出当前ID值路有线的属性序列
				var tmpRouteList:XMLList=iXML.Route.(@ID==routeId).attributes();
				var tmpRouteXml:XML=new XML("<Route/>");
				for each (var tmpRouteAttr:XML in tmpRouteList)
				{
					if(tmpRouteAttr.name()=="ID")
					{
						tmpRouteXml.@ID=tmpRouteAttr.toString();
					}
					if(tmpRouteAttr.name()=="Name")
					{
						tmpRouteXml.@Name=tmpRouteAttr.toString();
					}
					if(tmpRouteAttr.name()=="FromElementID")
					{
						tmpRouteXml.@FromElementID=tmpRouteAttr.toString();
					}
					if(tmpRouteAttr.name()=="ToElementID")
					{
						tmpRouteXml.@ToElementID=tmpRouteAttr.toString();
					}
				}
				
				var tmpRoute:Route=new Route(this,tmpRouteXml);
			}	
		}

4.总结

程序的主题思想是:
1)根据XML文件中的ID属性,过滤出相应节点信息的XML对象,

2)根据XML对象的type属性new出相应封装好的类对象,这里用到了import flash.system.ApplicationDomain;类来获得当前程序的所有类域;

3)然后将相应xml信息对象作为参数传递给相应对象的解析函数,从而初始化新建对象的相应属性例如对于TaskNode类对象的解析调用如下函数:

override public function ParseFromXml(iXML:XML): int{
			//解析节点属性
			this.ID=iXML.@ID;
			this.x=iXML.@x;
			this.y=iXML.@y;
			this.maxTaskID=iXML.@taskNum;
			
			//解析子节点信息
			this.Name=iXML.Name;
			this.NodeType=iXML.NodeType;
			
			//设置当前节点的xml属性
			this.xml=iXML;
			this.Draw(this.x,this.y);
			return 0;
		}			

5.程序运行结果:

XML文件载入情况:



图形界面生成情况:

(编辑:李大同)

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

    推荐文章
      热点阅读