为TreeView控件绑定XML文件

 private  void loadTreeRoot()   //载入树根
        {
            this.tvXml.Nodes.Clear();     //清空TreeView的节点
            XmlDocument dom = new XmlDocument();  //创建XMl文件对象
            dom.Load(".\\book.xml");    //载入文件

            XmlElement rootEle = dom.DocumentElement;  //创建XML元素 DocumentElement即XML的第一个元素

            TreeNode rootTree = new TreeNode();  //创建TreeView树节点
            rootTree.Text = rootEle.Name;
            rootTree.Tag = rootEle;
            //xmlNode = rootEle;
            TreeNode temp = new TreeNode("tempnode");
            rootTree.Nodes.Add(temp);     //添加树节点
            this.tvXml.Nodes.Add(rootTree);   //为相应的TreeView添加节点
        }
        private void showAll()  
        {
            this.loadTreeRoot();
            this.tvXml.Nodes[0].Nodes.Clear();
            this.recursiveLoadXml(this.tvXml.Nodes[0]);
            this.tvXml.ExpandAll();  
        }
        private void recursiveLoadXml(TreeNode tNode)
        {
            XmlNode xNode = tNode.Tag as XmlNode;
            foreach (XmlNode xmlChildNode in xNode.ChildNodes)
            {
                TreeNode childTNode = new TreeNode();
                childTNode.Tag = xmlChildNode;
                if (xmlChildNode.NodeType == XmlNodeType.Element)
                {
                    childTNode.Text = xmlChildNode.Name;
                    if (tNode.Level == 0 && xmlChildNode.Attributes.Count > 0)
                    {
                        childTNode.Text += ":"
                         + xmlChildNode.Attributes[0].Name + "-"
                         + xmlChildNode.Attributes[0].Value;
                    }
                    tNode.Nodes.Add(childTNode);
                    this.recursiveLoadXml(childTNode);

                }
                else if (xmlChildNode.NodeType == XmlNodeType.Text)
                {
                    childTNode.Text = xmlChildNode.Value ;
                    tNode.Nodes.Add(childTNode);
                }                
               
            }
        }
        private void btnAddBook_Click(object sender, EventArgs e)
        {
            XmlDocument dom = new XmlDocument();
            dom.Load(".\\book.xml");

            //XmlNodeList xlst = dom.SelectNodes("book");
            TreeNode seletedTNode = this.tvXml.SelectedNode;
            if (seletedTNode == null)
            {
                MessageBox.Show("请选择要插入的位置!");
                return;
            }
            XmlNode selectXNode = seletedTNode.Tag as XmlNode;
            //XmlElement defXmlNode = XmlNode as XmlElement;

            XmlElement newBook = selectXNode.OwnerDocument.CreateElement("book"); //创建XML元素
            XmlAttribute newTitle = selectXNode.OwnerDocument.CreateAttribute("title");//创建XML属性
            XmlElement newAuthor = selectXNode.OwnerDocument.CreateElement("author");
            XmlElement newPrice = selectXNode.OwnerDocument.CreateElement("Price");
            XmlText title = selectXNode.OwnerDocument.CreateTextNode("C#"); 
            XmlText author = selectXNode.OwnerDocument.CreateTextNode("睿智汇海");
            XmlText price = selectXNode.OwnerDocument.CreateTextNode("300");
        
              //元素之间关联
            newBook.Attributes.Append(newTitle); //为元素添加属性
            newTitle.AppendChild(title); //为元素添加孩子节点

            newBook.AppendChild(newAuthor);
            newAuthor.AppendChild(author);

            newBook.InsertAfter(newPrice,newAuthor);
            newPrice.AppendChild(price);
            foreach(XmlNode node in dom.DocumentElement.ChildNodes)
            {
                if (selectXNode.InnerText== node.InnerText)
                {
                    selectXNode.ParentNode.InsertAfter(newBook, selectXNode);
                    selectXNode.OwnerDocument.Save(".\\book.xml"); //保存修改后的XML文件
                }
            }
            this.showAll();
        }

        private void tvXml_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            this.btnDelete.Enabled = true;
            this.btnModify.Enabled = true;
            
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            TreeNode seletedTNode = this.tvXml.SelectedNode;
            if (seletedTNode == null)
            {
                MessageBox.Show("请选择一个节点");
            }
            else
            {
                XmlNode xnode = seletedTNode.Tag as XmlNode;
                xnode.ParentNode.RemoveChild(xnode);
                xnode.OwnerDocument.Save(".\\book.xml");
                this.showAll();
 
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            this.showAll();
        }

        private void btnModify_Click(object sender, EventArgs e)
        {
            XmlDocument dom = new XmlDocument();
            dom.Load(".\\book.xml");
            TreeNode selectTNode = this.tvXml.SelectedNode;
            if (selectTNode == null)
            {
                MessageBox.Show("请选择一个节点");
                return;
            }
            XmlNode selectXNode = selectTNode.Tag as XmlNode;
            foreach (XmlNode node in dom.DocumentElement.ChildNodes)
            {
                if (node.InnerText == selectXNode.ParentNode.ParentNode.InnerText)
                {
                    foreach (XmlNode child in node.ChildNodes)
                    {
                        if(child.InnerText==selectXNode.InnerText)
                        child.InnerText = this.txtValue.Text;
                    }
                    dom.Save(".\\book.xml");
                }
            }
            selectXNode.InnerText= this.txtValue.Text;
            this.showAll();

        }

        private void tvXml_AfterSelect(object sender, TreeViewEventArgs e)
        {
            this.txtValue.Text = this.tvXml.SelectedNode.Text;
        }

posted @ 2013-03-12 21:32  顶顶顶顶  阅读(229)  评论(0)    收藏  举报