`

XML:将XML读取到TREEVIEW中之递归方法

XML 
阅读更多
       /// <summary>

        /// btnXML2Tree_Click

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btnXML2Tree_Click(object sender, EventArgs e)

        {

            pnlModifyData.Visible = false;

            txtModiData.Text = "";

            if (this.dlgOpen.ShowDialog() == DialogResult.OK)

            {

                DisplayTree();

            }

        }



       private void DisplayTree()

        {

           if(dlgOpen.FileName.Trim().Length!=0)

           {

                XmlDocument xmlDoc = new XmlDocument();

                xmlDoc.Load(dlgOpen.FileName);



                XmlNodeList xmlNodes = xmlDoc.DocumentElement.ChildNodes;

                tvwStudents.ShowNodeToolTips = true;

                tvwStudents.ShowPlusMinus = true;



                TreeNode rootNode = null;   //新建根结点rootNode



                this.tvwStudents.BeginUpdate();

                this.tvwStudents.Nodes.Clear();

                rootNode = tvwStudents.Nodes.Add(xmlDoc.LastChild.Name);  //将XML中的根结点与rootNode关联

                rootNode.Tag = "0";

                XmlNode2TreeNode(xmlNodes, rootNode.Nodes);   //xmlNodes为全集(除根结点外)的;rootNode.Nodes为空集,做加结点准备

                rootNode.Expand();                           //展开根结点rootNode



                this.tvwStudents.EndUpdate();

        }

       }



        /// <summary>

        /// 递归方法 XmlNode2TreeNode

        /// </summary>

        /// <param name="xmlNode"></param>

        /// <param name="treeNode"></param>

        private void XmlNode2TreeNode(XmlNodeList xmlNode, TreeNodeCollection treeNode)   //递归方法

        {

            foreach (XmlNode var in xmlNode)                           //遍历XmlNodeList类对象,

            {

                TreeNode newTreeNode = new TreeNode();                    

                if (var.NodeType == XmlNodeType.Element)               //1 如是元素

                {

                    newTreeNode.Text = var.Name;

                    if (var.Attributes.Count != 0)                       //11 如有属性

                    {

                        for (int i = 0; i < var.Attributes.Count; i++)

                            newTreeNode.ToolTipText = var.Attributes[i].Name + ": " + var.Attributes[i].Value;

                    }

                    treeNode.Add(newTreeNode);

                }

                if (var.NodeType == XmlNodeType.Text)                 //2  如是文本内容

                {

                    newTreeNode.Text = var.Value;

                    newTreeNode.Tag = "text";

                    newTreeNode.NodeFont = new Font("宋体", Font.Size+0.1f, FontStyle.Bold);

                    newTreeNode.ForeColor = Color.DarkBlue;

                    newTreeNode.BackColor = Color.LightYellow;

                    treeNode.Add(newTreeNode);

                }

                if (var.NodeType == XmlNodeType.Comment)

                {

                    newTreeNode.Text = "注: "+var.Value;

                    newTreeNode.Tag = "comment";

                    newTreeNode.NodeFont = new Font("黑体",Font.Size, FontStyle.Italic);

                    newTreeNode.ForeColor = Color.Green;

                    treeNode.Add(newTreeNode);

                }

                if (var.HasChildNodes)                                //3 如有子结点集合

                {

                    XmlNode2TreeNode(var.ChildNodes, newTreeNode.Nodes);

                }

            }

        }



        private void btnOK_Click(object sender, EventArgs e)

        {

            if (tvwStudents.SelectedNode == null) return;

            tvwStudents.SelectedNode.Text = txtModiData.Text;  //0



            XmlDocument xmlDoc = new XmlDocument(); //1

            xmlDoc.Load(dlgOpen.FileName);



            XmlNode xn = xmlDoc.LastChild;

            for (int i = 0; i < sTemp.Length-1; i++)

            {

                xn = xn.ChildNodes[Convert.ToInt16(sTemp.Substring(i, 1))];

            }

            xn.InnerText = txtModiData.Text;

            xmlDoc.Save(dlgOpen.FileName);



            txtModiData.Text = "";

        }



        private void tvwStudents_AfterSelect(object sender, TreeViewEventArgs e)

        {

            sTemp = "";

            TreeNode tn = tvwStudents.SelectedNode;

            int temp = tn.Level;

            while (temp != 0)

            {

                sTemp = tn.Index.ToString().Trim() + sTemp;

                tn = tn.Parent;

                temp = tn.Level;

            }



            btnDel.Enabled = false;

            pnlModifyData.Visible = false;

            if (e.Node.Nodes.Count == 0 && e.Node.Tag.ToString() != "comment")

            {

                pnlModifyData.Location = new Point(e.Node.Bounds.Left, e.Node.Bounds.Bottom +(int)Font.Size);

                pnlModifyData.Visible = true;

            }

            else

                btnDel.Enabled = true;

        }



        private void btnDel_Click(object sender, EventArgs e)

        {

            XmlDocument xmlDoc = new XmlDocument(); //1

            xmlDoc.Load(dlgOpen.FileName);



            XmlNode xn = xmlDoc.LastChild;

            for (int i = 0; i < sTemp.Length; i++)

            {

                xn = xn.ChildNodes[Convert.ToInt16(sTemp.Substring(i, 1))];

            }

            xn.ParentNode.RemoveChild(xn);

            xmlDoc.Save(dlgOpen.FileName);

            tvwStudents.Nodes.Remove(tvwStudents.SelectedNode);

        }



运行效果图如下:

申明:部分代码来源于网络,感谢那些作者们,谢谢!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics