`

遍历xml数据,显示三层树

阅读更多
<?xml version="1.0" encoding="UTF-8"?>
<menuList>
	<menu name="菜单1" url="download.php" swf="icon1.swf">
		<cmenu name="闯关1" url="onservice.php">
		   <award id="10001" lv="1"/>
		   <award id="10002" lv="2"/>
		</cmenu>
		<cmenu name="闯关2" url="onservice1.php"/>
		<cmenu name="闯关3" url="onservice2.php"/>
		<cmenu name="闯关4" url="onservice.php">
		   <award id="10003" lv="1"/>
		   <award id="10004" lv="2"/>
		</cmenu>
	</menu>
	<menu name="菜单2" url="news.php" swf="icon1.swf">
		<cmenu name="INTEL" url="onservice.php"/>
		<cmenu name="AMD" url="onservice.php"/>
		<cmenu name="XFX" url="onservice.php"/>
		<cmenu name="MSI" url="onservice.php"/>
	</menu>
</menuList>

package{
  import flash.display.*;
  import flash.events.*;
  import flash.net.*;
  import flash.text.*;
  public class menu extends Sprite {
    private var url:URLLoader;
    private var sprite:Sprite;
    private var mainsprite:Sprite;
    private var test:TextField;
    private var ctest:TextField;
    private var xml:XML;
    private var _xml:XML;
    public function menu(){
       url = new URLLoader;
       url.load(new URLRequest("MenuList.xml"));
       url.addEventListener(Event.COMPLETE,handcomplete);
    }

    private function handcomplete(event:Event){
       xml = new XML(event.target.data);
       _xml = xml;
       for(var i:int=0;i<xml.menu.length();i++){
          var mname:String=xml.menu[i].@name;
	  test = new TextField;
	  test.border=true;
	  test.selectable=false;
	  test.text=mname;
	  test.x=20;
	  test.y=i*test.height+20;
	  test.name=String(i); //记录下标
	  test.addEventListener(MouseEvent.CLICK,dispChildMenu);
	  addChild(test);
       }
    }

    private function dispChildMenu(event:MouseEvent):void
    {
        if(sprite){
	  for (var k:int=sprite.numChildren - 1; k >=0; k--){
	     sprite.removeChildAt(k);
	  }
	}else{
	  sprite = new Sptite();
	}
	
	for(var j:int=this.numChildren-1;j>=0;j--){
	   if(j>event.target.name){
	     this.removeChildAt(j);
	   }
	}

	addChild(sprite);
        var len:Number = new Number(event.target.name);
        var _mc:MovieClip;
	if(xml.menu[len].length()>0){
	   for(j=0;j<xml.menu[len].cmenu.length();j++){
	     _mc = new MovieClip();
	     var cname:String=xml.menu[len].cmenu[j].@name;
	     ctest = new TextField;
	     ctest.border=true;
	     ctest.autoSize="left";
	     _mc.x = event.target.x;
             _mc.y = ctest.height*(j+1);
	   var awardData : Array = new Array();   //重要
	     for(var m:int=0;m<xml.menu[len].cmenu[j].award.length();m++){  //重要
	        var tob:Object = new Object();                          //重要
		for each(var d in xml.menu[len].cmenu[j].award[m].attributes()){  //重要
		  tob[String(d.name())] = d;                              //重要
		}
		awardData.push(tob);                                      //重要
	     }

	     _mc.awarddata = awardData;
	     _mc.addChild(ctest);
	     _mc.addEventListener(MouseEvent.CLICK,dispThirdMenu);
	     sprite.addChild(_mc);
	   }
	
	}

	for(var i:int=0;i<_xml.menu.length();i++){
	   if(i>event.target.name){
	      var mname = _xml.menu[i].@name;
	      test = new TextField;
	      test.border=true;
	      test.autoSize="left";
	      test.text = mname;
	      test.x=20;
	      test.y = i*test.height+76;
	      test.name=String(i);
	      test.addEventListener(MouseEvent.CLICK,dispChildMenu);
	      addChild(test);
	   
	   }
	
	}

    }

    function dispThirdMenu(event:MouseEvent):void{
       for(var k:int=0;k<event.currentTarget.awarddata.length;k++){
           trace(event.currentTarget.awarddata[k].id);
	   trace(event.currentTarget.awarddata[k].lv);
       
       }
    
    }
  
  
  }

}


删除容器子对象有两种写法:

1. for(var k:int=sprite.NumChildren-1;k>=0;k--){
           sprite.removeChildAt(k);
    }

2. var k:uint = sprite.numChildren;
    whild(k>0){
     sprite.removeChildAt(k);
     k--;
    }
由于显示列表会自动移动显示对象填充空缺,所以只移除0索引的位置即可。这样效率最高。

引用
黑羽写的:容器中的子显示对象分为两类:

处于显示列表中的子显示对象。被numChildren所记录的。

由容器graphics对象绘制出来的矢量图。这个矢量图不属于Shape类型,不在容器的显示列表中,不被

numChildren所记录。而是做为容器的背景矢量图存在,始终处于最后面。因此,准确的说,如果要移除容器下所有子显示对象,就要分别移除这两类对象。

比如有一个容器,其下有8个sprite子对象,和一个graphics绘制出的图像: var con:Sprite = new Sprite();

addChild(con);

for(var n:int =0; n<8; n++) {

con.addChild(new Sprite());

}

con.graphics.beginFill(0xFF0000);

con.graphics.drawCircle(100,100,100);

con.graphics.endFill();

trace ("con's children:" + con.numChildren);

//输出:con's children:8   graphics对象绘制的图形果然不在其中。


摘自:http://blog.sina.com.cn/s/blog_5a6f39cf0100njuv.html
分享到:
评论

相关推荐

    图解数据结构6-树及树的遍历

    ### 图解数据结构6-树及树的遍历 #### 一、树的基本概念 树是一种非线性的数据结构,其形状如同一棵倒置的树,具有一个根节点(root)和若干子节点(sub-nodes),并且子节点可以进一步拥有自己的子节点。在计算机科学...

    基于Python的多叉树遍历算法.zip

    多叉树遍历在许多领域都有应用,如文件系统的遍历、XML文档解析、编译器的语法分析、游戏中的路径查找等。Python的灵活性和丰富的库使其成为实现这些算法的理想选择。 总结,"基于Python的多叉树遍历算法.zip"的...

    Winform三层架构中实现XML操作

    总结来说,在Winform三层架构中实现XML操作涉及对XML文件的读取、解析和写入,通过数据访问层和业务逻辑层的协同工作,将XML数据展示在用户界面,如用户登录时的下拉列表。这种设计既保证了数据的独立性,又方便了...

    C#读写XML文件,支持多层节点

    在C#编程中,XML文件常用于存储结构化数据,如程序配置、游戏存档或数据交换等场景。本文将详细讲解如何使用C#进行XML文件的读写操作,特别是处理多层节点的情况。 首先,我们需要了解.NET Framework提供的System....

    java读取json格式3层树结构数据.zip

    本教程将详细讲解如何使用Java解析具有3层树结构的JSON数据,并扩展到更多的层数。首先,我们需要了解JSON的基本概念和Java中的相关库。 JSON是一种轻量级的数据交换格式,它基于JavaScript的一个子集,易于人阅读...

    C#操作XML完整demo

    在C#中,读取XML文件通常使用`XmlDocument`的`Load()`方法,然后通过遍历XML树来获取或修改数据。写入XML文件则使用`Save()`方法。另外,`XmlWriter`可以用来流式地创建XML结构,而`XmlNodeReader`则用于读取XML数据...

    Spring+iBatis+JDom递归生成XML树

    4. **递归算法**:在递归函数中,遍历每一层级的数据,如果当前数据有子项,则创建子节点并继续递归,直到所有数据都转化为XML节点。 5. **输出XML**:完成XML树构建后,使用JDom的相应方法将XML树写入文件,生成...

    tinyxml XML解析器

    - **遍历XML结构**: 解析后的XML文档可以通过`FirstChildElement()`、`FirstChild()`, `NextSiblingElement()`等方法进行遍历。例如,查找并打印所有的元素: ```cpp TiXmlElement* root = doc.RootElement(); for ...

    domino通过lotusscript解析xml

    在Lotus Domino开发环境中,使用LotusScript处理XML数据是一种常见的任务。XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档存储。Lotusscript是IBM Lotus Domino...

    加密XML数据结构索引方案研究.pdf

    1. XML数据结构:XML(Extensible Markup Language,可扩展标记语言)具有树形结构特性,每个XML文档都可以表示为一棵树。树中的每个节点代表XML文档中的元素,其中节点间存在父子和兄弟关系。DOM树(Document ...

    VS C++递归法读XML

    总之,C++中使用CMarkup库通过递归法遍历XML文档,可以高效且灵活地处理XML数据。理解XML的结构以及CMarkup库的API,对于进行XML解析和操作至关重要。这种方法虽然在网上可能不常见,但对于理解和掌握XML处理技巧...

    用Javascript实现XML文档数据检索.pdf

    同时,使用Javascript的DOM可以实现对基于XML的数据检索,例如检索XML文档中的数据,显示检索结果等。 四、结论 本文主要介绍了使用Javascript实现XML文档数据检索的技术,包括基于XML的数据检索技术、DOM对XML...

    ch8_ASP操作XML文件.ppt

    - **修改XML数据** - 改变DOM树的节点值或结构,然后将其保存回XML文件。 - **写入XML文件** - 将DOM对象序列化为XML字符串,并写入到文件中。 例如,以下ASP代码片段展示了如何使用ASP读取和解析XML文件: ```...

    SQL Server对XML文档的数据抽取方法的分析与实现.pdf

    研究如何将XML数据高效地抽取并存入关系数据库中,可显著提高数据使用效率,满足现代Web应用中对数据处理和查询的需求。通过本文的指导,技术人员可对XML和SQL Server有更深刻的理解,从而在实际工作中应用这些技术...

    支持多级的xml菜单(新)

    - 解析后,程序可以获取到XML文档的元素树,遍历这个树以构建菜单树结构。 3. **构建菜单**: - 根据解析得到的元素树,可以递归地创建菜单对象(如MenuItem类),每个对象包含其子菜单对象的引用。 - 在前端,...

    Ext解析XML实例

    此段代码首先创建了一个`TreePanel`组件,用于显示树形结构。接着,根据传入的`xmlsrc`参数类型(XML字符串或URL),选择不同的处理方式。如果是XML字符串,则直接调用`treeNodeFromXml`函数来构建树形结构;如果是...

    Java xml转化为map

    - DOM4J和JDOM提供了方便的方法来遍历XML文档并创建Map。例如,DOM4J的`DocumentHelper.parseText()`可以解析XML字符串,然后通过遍历`Element`和`Attribute`来构建Map。 - Apache Commons Digester库提供了一种...

    java一键xml转map,一键map转xml工具类

    在Java中,我们可以使用`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`来解析XML文档,然后遍历DOM树,将其节点转化为Map。例如,每个XML元素的标签名作为键,元素的文本内容作为值。如果元素...

    C#读取XML教程和例子(有代码)

    在C#编程中,XML(eXtensible Markup Language)是一种常见的数据交换格式,用于存储和传输结构化数据。本文将深入探讨如何使用C#语言读取XML...理解并掌握这些技术对于处理XML数据至关重要,能够提升你的C#编程能力。

    XML文件转成TXT文件

    2. 遍历XML文档:通过`XmlNodeList`获取所有元素节点,可以使用`doc.GetElementsByTagName("*")`获取所有元素,或者根据需要选择特定元素。 3. 提取内容:遍历每个元素节点,获取其文本内容和子元素。`XmlNode node...

Global site tag (gtag.js) - Google Analytics