这个问题思考了很久,写个很多种递归,也走了很多弯路,为了让你们也少走弯路。我把解决方法写下。
适合场景: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]会乱删。
分享到:
相关推荐
在本示例中,我们看到的是一种递归删除操作,主要用于数据库中的部门管理。递归在这里被用来删除一个部门及其所有子部门。下面将详细解释这段代码的工作原理和递归在其中的作用。 首先,`del` 函数接受一个参数 `$...
如果传入的父节点不为空并且具有子节点,它会遍历每个子节点,将其添加到结果列表中,并通过递归调用自身获取子节点的子节点,将这些子节点也添加到结果列表中。最后,返回包含所有子节点的列表。 在实际项目中,你...
SQL Server 中递归查找子节点和父节点 在关系数据库管理系统中,特别是在 SQL Server 中,递归查找子节点和父节点是一种常见的操作。这种操作可以应用于树形结构的数据存储和查询中,例如组织结构、目录结构、分类...
* 删除节点 E 和它的子孙节点成功 运行结果: * 节点 E 和它的子孙节点被成功删除 从上面的讨论可以看出,递归算法在删除某一个节点的子树算法中的应用非常重要。通过递归函数的设计,我们可以轻松地删除某一个...
XML文件的层级结构使得递归遍历成为自然的选择,因为每个元素都可以看作是独立的节点,其子元素则是节点的下级。 二、递归遍历的概念 递归是一种解决问题的方法,它通过调用自身来解决复杂问题。在遍历XML文件时,...
递归算法计算二叉树中叶子节点的数目
在数据库管理中,删除具有层级关系的...总之,通过使用存储过程和广度优先搜索,我们可以有效地在数据库表中删除具有父子关系的节点,同时确保删除操作的完整性和安全性。对于复杂的层级数据结构,这种方法尤其有用。
- `ParseXML` 函数接受一个 `XmlNode` 类型的参数,用于递归遍历XML文档中的节点。 - 遍历过程中,首先打印当前节点的名称,然后对当前节点的所有子节点进行递归处理,仅当子节点是元素节点时才进行递归调用。 通过...
6. **安全性与权限**:Zookeeper的每个节点都有相应的ACL,所以在删除节点之前,需要确保当前用户有对应的权限。在代码中可能需要设置或检查ACL,以确保操作的合法性。 7. **异步操作**:Zookeeper提供了异步操作的...
在树形结构中删除某个父节点时,需要递归删除其所有子节点,以避免遗留冗余数据。下面将为大家介绍使用 Java 和 MySQL 实现递归删除树形结构的所有子节点的方法。 一、业务场景 在树形结构中,删除某个父节点时,...
递归实现 二种非递归实现 二叉树中序遍历: 递归实现 非递归实现 二叉树后序遍历: 递归实现 非递归实现 二叉树层次遍历 二叉树层次创建,创建方法遵循卡特兰数 http://write.blog.csdn.net/postedit/17380455
本篇文章将详细讲解如何在C#中使用递归方法为`TreeView`添加子节点,特别是在处理文件夹结构时。递归是一种强大的编程技术,它允许函数调用自身来解决问题,特别适合处理具有层级关系的数据。 首先,我们需要理解`...
根据给定文件的信息,本文将围绕“递归链表中值最大的节点”这一主题进行深入探讨,主要包括链表的基本概念、链表的遍历与插入操作、递归查找链表中最大值节点的方法以及示例代码分析。 ### 链表的基本概念 链表是...
`xmlToArray()`函数遍历每个节点,如果子节点有子元素,则继续调用自身,形成递归。最终,`$arrayData`将包含解析好的XML结构。 接下来,我们将这个数组传递给ExtJS的tree组件。在ExtJS中,tree组件通常接收一个...
在上述代码中,`processNode`函数实现了递归读取XML的功能。它首先检查节点类型,如果是元素节点,则处理该元素(这里仅打印元素名,实际应用中可能需要提取属性或内容)。接着,获取并递归处理所有子节点。 3. **...
2. **删除节点**:在Delphi中,可以使用`TreeView1.Items`集合来访问和操作所有节点。删除单个节点通常使用`Delete`方法,例如`TreeView1.Items[index].Delete`,这里的`index`是目标节点的索引。但是,这只会删除...
在给出的示例中,描述了一个递归删除部门节点及其所有子部门的过程。这是通过编写一个递归函数来实现的。递归函数的实质是函数自己调用自己。在递归函数中,如果满足某个条件(递归基准),则执行某些操作并返回;...
当处理大型XML文件时,传统递归方法可能会导致性能下降,特别是在处理深层嵌套的节点时。针对这一问题,"遍历XML文件内所有节点和属性"的非递归方法应运而生。 在描述中提到的“比递归调用的速度要快很多”,这通常...
在Flex中,可以使用XML的elementsByTagName()方法或children()属性来获取节点的所有子节点,然后通过递归函数遍历这些子节点,实现无限级别的查找。如果找到匹配的节点,可以返回该节点及其所有子节点,这就是“若...