`
yr512656630
  • 浏览: 320322 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Flex 递归删除XMLList中节点

    博客分类:
  • flex
 
阅读更多
这个问题思考了很久,写个很多种递归,也走了很多弯路,为了让你们也少走弯路。我把解决方法写下。

适合场景:xmlList中递归删除自身节点。
实例:
xmlList=<power name="视图" power_id="001" code="MONITOR_VIEW" state="unchecked" visible="true">
  <power name="主机视图" power_id="001001" code="HOST_COMPUTER_VIEW" state="unchecked" visible="true"/>
  <power name="定制视图" power_id="001002" code="BUSINESS_VIEW" state="unchecked" visible="true"/>
  <power name="营业部视图" power_id="001005" code="SUBCORE_VIEW" state="unchecked" visible="true"/>
  <power name="列表视图" power_id="001007" code="ALL_LIST" state="unchecked" visible="false"/>
</power>
<power name="监控" power_id="010" code="MONITOR_MENU" state="unchecked" visible="true">
  <power name="监视器管理" power_id="002001" code="MONITOR_MANAGE_LIST" state="unchecked" visible="true"/>
  <power name="模版管理" power_id="002006" code="MONITOR_TEMPLATE_MANAGE" state="unchecked" visible="true"/>
  <power name="任务设置" power_id="005004" code="TASK_SETTING" state="unchecked" visible="true">
  </power>
</power>
<power name="作业" power_id="100" code="JOB" state="unchecked" visible="false">
  <power name="作业网管理" power_id="100001" code="JOB_NET_MANAGE" state="unchecked" visible="false"/>
</power>

删除方式:找到visible="false" 删除,检索过滤

实现:递归遍历

代码:

//一定要用索引,而且删除的对象要是XMLList里面的元素,不然会报错,或者不能删除
			private function delNoVisibleNode(xmllist:XMLList):void
			{
				//for each (var item:XML in xmllist)
				for (var i:int=xmllist.length() - 1; i >= 0; i--)
				{
					var item:XML=xmllist[i];
					if (item.@visible.toString() == "false" && item != null)
					{
						delete xmllist[item.childIndex()];
						menuByVisibleFlaseXML.appendChild(item);
						//删除符合条件的子节点: delete xml.children()(@type ==  “car” && @color == “red”); 
					}
					else if (item.@visible.toString() == "true")
					{
						if (item.hasComplexContent()) //有子节点
						{
							arguments.callee(item.children());
							//delNoVisibleNode(item.children());
						}
					}
				}
			}


以上代码说明:首先使用delete以后xmllist的长度也在减少,如果用for each中循环的次数也减少了,导致节点没有删干净。所以解决是使用倒序从大到小删除。

其次删除的时候一定要用它的索引index.如果是使用xmlList[i]会乱删。
0
0
分享到:
评论

相关推荐

    递归删除一个节点以及该节点下的全部节点示例_.docx

    在本示例中,我们看到的是一种递归删除操作,主要用于数据库中的部门管理。递归在这里被用来删除一个部门及其所有子部门。下面将详细解释这段代码的工作原理和递归在其中的作用。 首先,`del` 函数接受一个参数 `$...

    树父节点递归获取树子节点

    如果传入的父节点不为空并且具有子节点,它会遍历每个子节点,将其添加到结果列表中,并通过递归调用自身获取子节点的子节点,将这些子节点也添加到结果列表中。最后,返回包含所有子节点的列表。 在实际项目中,你...

    递归算法应用:删除某一个节点的子树算法

    * 删除节点 E 和它的子孙节点成功 运行结果: * 节点 E 和它的子孙节点被成功删除 从上面的讨论可以看出,递归算法在删除某一个节点的子树算法中的应用非常重要。通过递归函数的设计,我们可以轻松地删除某一个...

    Java递归遍历XML所有元素

    Java 递归遍历 XML 所有元素是指使用 Java 语言来遍历 XML 文件中的所有元素节点,并将其值取出来。这种操作是 XML 解析的基础,能够为更复杂的解析工作奠定基础。 在 Java 中,通常使用 DOM4j 库来解析 XML 文件。...

    利用递归方式遍历XML文件

    XML文件的层级结构使得递归遍历成为自然的选择,因为每个元素都可以看作是独立的节点,其子元素则是节点的下级。 二、递归遍历的概念 递归是一种解决问题的方法,它通过调用自身来解决复杂问题。在遍历XML文件时,...

    递归算法计算二叉树中叶子节点的数目

    递归算法计算二叉树中叶子节点的数目

    文件递归-XML递归-树图递归

    - `ParseXML` 函数接受一个 `XmlNode` 类型的参数,用于递归遍历XML文档中的节点。 - 遍历过程中,首先打印当前节点的名称,然后对当前节点的所有子节点进行递归处理,仅当子节点是元素节点时才进行递归调用。 通过...

    JAVA实现zookeeper节点批量删除工具类.rar

    6. **安全性与权限**:Zookeeper的每个节点都有相应的ACL,所以在删除节点之前,需要确保当前用户有对应的权限。在代码中可能需要设置或检查ACL,以确保操作的合法性。 7. **异步操作**:Zookeeper提供了异步操作的...

    使用递归删除树形结构的所有子节点(java和mysql实现)

    在树形结构中删除某个父节点时,需要递归删除其所有子节点,以避免遗留冗余数据。下面将为大家介绍使用 Java 和 MySQL 实现递归删除树形结构的所有子节点的方法。 一、业务场景 在树形结构中,删除某个父节点时,...

    二叉树递归和非递归遍历以及层次构建节点数为n的二叉树

    递归实现 二种非递归实现 二叉树中序遍历: 递归实现 非递归实现 二叉树后序遍历: 递归实现 非递归实现 二叉树层次遍历 二叉树层次创建,创建方法遵循卡特兰数 http://write.blog.csdn.net/postedit/17380455

    C# TreeView递归添加子节点

    本篇文章将详细讲解如何在C#中使用递归方法为`TreeView`添加子节点,特别是在处理文件夹结构时。递归是一种强大的编程技术,它允许函数调用自身来解决问题,特别适合处理具有层级关系的数据。 首先,我们需要理解`...

    SQL sever 中递归查找子节点和父节点

    SQL Server 中递归查找子节点和父节点 在关系数据库管理系统中,特别是在 SQL Server 中,递归查找子节点和父节点是一种常见的操作。这种操作可以应用于树形结构的数据存储和查询中,例如组织结构、目录结构、分类...

    递归链表中值最大的节点

    根据给定文件的信息,本文将围绕“递归链表中值最大的节点”这一主题进行深入探讨,主要包括链表的基本概念、链表的遍历与插入操作、递归查找链表中最大值节点的方法以及示例代码分析。 ### 链表的基本概念 链表是...

    php递归解析xml

    `xmlToArray()`函数遍历每个节点,如果子节点有子元素,则继续调用自身,形成递归。最终,`$arrayData`将包含解析好的XML结构。 接下来,我们将这个数组传递给ExtJS的tree组件。在ExtJS中,tree组件通常接收一个...

    java递归读取xml文件

    在上述代码中,`processNode`函数实现了递归读取XML的功能。它首先检查节点类型,如果是元素节点,则处理该元素(这里仅打印元素名,实际应用中可能需要提取属性或内容)。接着,获取并递归处理所有子节点。 3. **...

    删除TreeView节点以及其子节点

    2. **删除节点**:在Delphi中,可以使用`TreeView1.Items`集合来访问和操作所有节点。删除单个节点通常使用`Delete`方法,例如`TreeView1.Items[index].Delete`,这里的`index`是目标节点的索引。但是,这只会删除...

    遍历XML文件内所有节点和属性

    当处理大型XML文件时,传统递归方法可能会导致性能下降,特别是在处理深层嵌套的节点时。针对这一问题,"遍历XML文件内所有节点和属性"的非递归方法应运而生。 在描述中提到的“比递归调用的速度要快很多”,这通常...

    flex-xml合并,树查找xml

    在Flex中,可以使用XML的elementsByTagName()方法或children()属性来获取节点的所有子节点,然后通过递归函数遍历这些子节点,实现无限级别的查找。如果找到匹配的节点,可以返回该节点及其所有子节点,这就是“若...

    treeview递归方法 查询节点

    在上述代码片段中,我们看到了一个具体的实现案例,即通过递归方法查询并构建`treeview`的节点。接下来,我们将深入分析这一知识点,包括其原理、代码解析以及可能的应用场景。 ### 1. 知识点概述:`treeview`递归...

    QT对XML增删查改读取,节点自定义,键值自定义

    在XML中,键值对通常通过属性(attributes)来实现。使用QDomElement的setAttribute方法添加新属性,getAttribute和setAttributeNode方法读取和修改属性。 ```cpp QDomElement node = ...; // 获取要修改的节点 ...

Global site tag (gtag.js) - Google Analytics