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

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

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

2.具体XML文件解析

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

  1. public function ParseFromXml(iXML:XML): void{  
  2.             this.Clear();  
  3.             parseNode(iXML);  
  4.             parseRoute(iXML);  
  5.         }  

对于这段代码:

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

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

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

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

3.parseNode(iXML:XML)函数

  1. //解析节点信息  
  2.         public function parseNode(iXML:XML):void  
  3.         {  
  4.             var newElementClass : Class  
  5.             var myelement:Element;  
  6.             var domain : ApplicationDomain = ApplicationDomain.currentDomain;  
  7.             var elementName:String="";  
  8.             var i:int;  
  9.             //先解析Node节点  
  10.             //获得当前节点的ID值(唯一属性)序列  
  11.             var comList:XMLList=iXML.Node.attribute("ID");  
  12.             for each (var comXml:XML in comList) {  
  13.                 var currId:String=comXml.toString();  
  14.                 var tmpAttrList:XMLList=iXML.Node.(@ID==currId);  
  15.                 //Alert.show(tmpAttrList);  
  16.                   
  17.                 //读出当前ID值节点的属性序列  
  18.                 //var tmpAttrList:XMLList=iXML.Node.(@ID==currId).attributes();  
  19.                 //构造当前解析节点所需的XML  
  20.                 for each (var tmpXml:XML in tmpAttrList)  
  21.                 {  
  22.                     //Alert.show(tmpXml);  
  23.                     elementName="wf."+tmpXml.@type;  
  24.                   
  25.                     if(domain.hasDefinition(elementName))  
  26.                      {  
  27.                         //动态创建类对象  
  28.                         newElementClass = domain.getDefinition(elementName) as Class;  
  29.                         myelement = new newElementClass(this,tmpXml);  
  30.                         //绘制当前节点  
  31.                         if(myelement is EndNode)  
  32.                         {  
  33.                             var endNode:EndNode=myelement as EndNode;  
  34.                             endNode.Draw(tmpXml.@x,tmpXml.@y);  
  35.                         }  
  36.                         if(myelement is BeginNode)  
  37.                          {  
  38.                             var beginNode:BeginNode=myelement as BeginNode;  
  39.                             beginNode.Draw(tmpXml.@x,tmpXml.@y);  
  40.                         }  
  41.                         if(myelement is ForkNode)  
  42.                         {  
  43.                             var forkNode:ForkNode=myelement as ForkNode;  
  44.                             forkNode.Draw(tmpXml.@x,tmpXml.@y);  
  45.                         }  
  46.                         if(myelement is JoinNode)  
  47.                         {  
  48.                             var joinNode:JoinNode=myelement as JoinNode;  
  49.                             joinNode.Draw(tmpXml.@x,tmpXml.@y);  
  50.                         }  
  51.                         if(myelement is TaskNode)  
  52.                         {  
  53.                             var taskNode:TaskNode=myelement as TaskNode;  
  54.                             taskNode.Draw(tmpXml.@x,tmpXml.@y);  
  55.                             }  
  56.                         if(myelement is WorkNode)  
  57.                         {  
  58.                             var workNode:WorkNode=myelement as WorkNode;  
  59.                             workNode.Draw(tmpXml.@x,tmpXml.@y);  
  60.                         }  
  61.                     }  
  62.                 }  
  63.             }  
  64.         }  

4.parseRoute(iXML:XML)函数

  1. //解析路由线  
  2.         public function parseRoute(iXML:XML):void  
  3.         {  
  4.             var routeList:XMLList=iXML.Route.attribute("ID");  
  5.             for each (var routeXml:XML in routeList)  
  6.             {  
  7.                 //Alert.show(routeXml);  
  8.                 var routeId:String=routeXml.toString();  
  9.                 //读出当前ID值路有线的属性序列  
  10.                 var tmpRouteList:XMLList=iXML.Route.(@ID==routeId).attributes();  
  11.                 var tmpRouteXml:XML=new XML("<Route/>");  
  12.                 for each (var tmpRouteAttr:XML in tmpRouteList)  
  13.                 {  
  14.                     if(tmpRouteAttr.name()=="ID")  
  15.                     {  
  16.                         tmpRouteXml.@ID=tmpRouteAttr.toString();  
  17.                     }  
  18.                     if(tmpRouteAttr.name()=="Name")  
  19.                     {  
  20.                         tmpRouteXml.@Name=tmpRouteAttr.toString();  
  21.                     }  
  22.                     if(tmpRouteAttr.name()=="FromElementID")  
  23.                     {  
  24.                         tmpRouteXml.@FromElementID=tmpRouteAttr.toString();  
  25.                     }  
  26.                     if(tmpRouteAttr.name()=="ToElementID")  
  27.                     {  
  28.                         tmpRouteXml.@ToElementID=tmpRouteAttr.toString();  
  29.                     }  
  30.                 }  
  31.                   
  32.                 var tmpRoute:Route=new Route(this,tmpRouteXml);  
  33.             }     
  34.         }  

4.总结

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

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

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

  1. override public function ParseFromXml(iXML:XML): int{  
  2.             //解析节点属性  
  3.             this.ID=iXML.@ID;  
  4.             this.x=iXML.@x;  
  5.             this.y=iXML.@y;  
  6.             this.maxTaskID=iXML.@taskNum;  
  7.               
  8.             //解析子节点信息  
  9.             this.Name=iXML.Name;  
  10.             this.NodeType=iXML.NodeType;  
  11.               
  12.             //设置当前节点的xml属性  
  13.             this.xml=iXML;  
  14.             this.Draw(this.x,this.y);  
  15.             return 0;  
  16.         }             

5.程序运行结果:

XML文件载入情况:



图形界面生成情况:

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、资源1项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值