日期:2014-05-18  浏览次数:20815 次

难道一定要通过多次遍历,才能获得全部子节点吗??(包括子节点的子节点的子节点....所有节点)
C# code

XmlNodeList root = eep.DocumentElement.ChildNodes;
            foreach (XmlElement r in root)
            {
             Console.WriteLine(r.name);     
             }



上面的代码只能获得XML文件的根节点下的子节点,,,问题来了,但子节点下还有子节点A,并且子节点A下还有子节点B等等(非常多节点和分支)。。。。。。请问不通过多次遍历能够取得所有单个元素吗???

------解决方案--------------------
只能通过 递归 遍历啊
------解决方案--------------------
深度遍历、广度遍历。通过当前节点找到下面的节点。
------解决方案--------------------
我只知道递归遍历。。。
------解决方案--------------------
探讨

师傅,有没有相关的类方法可以一次遍历获得吗?引用:

深度遍历、广度遍历。通过当前节点找到下面的节点。

------解决方案--------------------
这个是在设计数据库时设计进去的。好像没有方法直接获取所有吧。
------解决方案--------------------
C# code

 private void treeView1_MouseClick(object sender, MouseEventArgs e)
        {
            //获取单击的节点
            TreeNode root = treeView1.GetNodeAt(new Point(e.X, e.Y));
            //该节点是否被选中
            bool isChecked = root.Checked;

            if (root != null)
            {
                //该节点的选中状态影响其子孙节点的状态
                FooChild(root, isChecked);
                //该节点的选中状态影响其父祖节点的状态
                FooParent(root);
            }
        }

        /**方法:递归子节点跟随其全选或全不选 Modify By Wangxu 2010-2-25*/
        private void FooChild(TreeNode node, bool isChecked)
        {
            node.Checked = isChecked;
            foreach (TreeNode nd in node.Nodes)
                FooChild(nd, isChecked);
        }


        /**方法:递归父节点跟随其全选或全不选 Add By Wangxu 2010-2-25*/
        private void FooParent(TreeNode root)
        {
            if (root.Parent != null)
            {
                //兄弟节点被选的个数
                int brotherNodeCheckedCount = 0;
                //遍历该节点的兄弟节点
                foreach (TreeNode node in root.Parent.Nodes)
                {
                    if (node.Checked == true)
                        brotherNodeCheckedCount += 1;
                }
                //兄弟节点全没选
                if (brotherNodeCheckedCount == 0)
                {
                    TreeNode parentNode = root.Parent;
                    parentNode.Checked = false;//其父节点也不选
                    FooParent(parentNode);
                }
                //兄弟节点中只要有一个被选
                if (brotherNodeCheckedCount == 1)
                {
                    TreeNode parentNode = root.Parent;
                    parentNode.Checked = true;
                    FooParent(parentNode);//其父节点也被选
                }
            }
        }

------解决方案--------------------
没有遍历所有节点的好办法,只能递归了,递归是能够保证不管你有多少层子节点都能显示出来的
------解决方案--------------------
我一直是用递归遍历的、
不过有人说他这不是用递归的、没去看、你可以看看
http://blog.csdn.net/xianfajushi/article/details/7756584

------解决方案--------------------
我上面发的就是 递归的例子啊 前段时间刚刚用过的