ASP.NET treeview与xml实现动态添加节点,元素,文本(text)

 text.xml文本

<?xml version="1.0" encoding="utf-8"?>
<userInfo value="userInfo1" name="userInfo">
  <ddd value="ddd" name="gddd">
zhangsan<ddd1 value="ddd1" name="gddd1">ddd1</ddd1><ddd2 value="ddd2" name="gddd2">ddd2</ddd2></ddd>
  <guest value="guest1" name="guest">
    <name value="test" name="name">qwqw<sdsd value="23" name="sdsd">sdsd</sdsd><hhh Value="20080822035545" name="hhh">dgf</hhh><oooooo Value="20080822065316">oooooo</oooooo><yuyu Value="20080822071322">yuyu</yuyu><tt Value="20080824041842">tt</tt><name1 value="20080824042213" name="name1">name1<iii Value="20080825105420">iii</iii></name1><keke Value="20080825112557">keke</keke><ok1 Value="20080825020120">0k1</ok1></name>
  </guest>
  <guest value="guest2" name="guest">
    <name value="test1" name="name">ttt<sdsd value="23" name="sdsd">sdsd</sdsd><rerere>rrr</rerere><yi Value="20080822023614" name="yi">yyyy</yi><hhh Value="20080822035545" name="hhh">dgfdfg</hhh><name1 value="20080824042217" name="name1">name1<llllllllll Value="20080826093317">111</llllllllll></name1></name>
  </guest>
</userInfo>

 

后台代码:

//点击节点触发事件(获取节点的属性)

 TreeNode tn1_1 = new TreeNode();

  protected void TreeView1_SelectedNodeChanged2(object sender, EventArgs e)
    {
       
        string str = tn1_1.Selected.ToString();
        TreeNode selectedNode = TreeView1.SelectedNode;   //获取选中的节点
        TreeNode child = new TreeNode("child");  //Create TreeNode           
        selectedNode.ChildNodes.Add(child);
           
            int count = TreeView1.SelectedNode.ChildNodes.Count;
         
            tn1_1 = TreeView1.SelectedNode;
          
            //ViewState["datapath"] = tn1_1.DataPath;
            ViewState["GetDelText"] = tn1_1.Text;
            ViewState["GetNavigateUrl"] = tn1_1.Target.ToString();
            ViewState["NodePath"] = tn1_1.ValuePath;
            ViewState["GetValue"] = tn1_1.ToolTip;
            ViewState["getvalue1"] = tn1_1.Value;         
                    this.TxtText.Text = (string)ViewState["GetDelText"];
            this.TxtPath.Text = (string)ViewState["NodePath"];
            this.TxtNavigateUrl.Text = (string)ViewState["GetNavigateUrl"];
            this.TextBox1.Text = Convert.ToString(ViewState["GetDelText"]);
            this.TextBox4.Text = "test.xml";
         }

//在相应点击节点插入节点、元素、属性、文本内容

//注:是插入自定义的元素、属性、文本

  //(动态的把数据写入XML文件)正在做。。。
    private void xmlwiter(string xmlpath)
    {
        XmlDocument xmldoc = new XmlDocument();
        xmldoc.Load(Server.MapPath("~//App_data//"+ xmlpath));
        //遍历treeview选中节点的位置
        TreeNodeCollection tc = TreeView1.Nodes;
        GetNode1(tc);
       
        XPathNavigator navigator = xmldoc.CreateNavigator();
        string nodepath = ViewState["NodePath"].ToString();
         foreach (XPathNavigator nav in navigator.Select((string)ViewState["NodePath"]))
         {
               nav.MoveToFirstAttribute();
             
              //if (nav.Name == Convert.ToString(ViewState["GetDelText"]))
               if (nav.Name =="value")
               {
                   if (nav.Value == Convert.ToString(ViewState["GetValue"]))
                   //if (nav.Value == "12")
                   {
                       nav.MoveToParent();//重新回到结点 

                      
                       string xmlpath1 = Convert.ToString(ViewState["NodePath"]);
                       string sp = ViewState["GetValue"].ToString();
                       //string sp = "20080824042217";
                       string fc = "[@value='" + sp + "']";
                       xmlpath1 += fc;
              
                       //XmlNode rootElement = xmldoc.SelectSingleNode(xmlpath1);//查找<userInfo>
                       //XmlNode rootElement7 = xmldoc.SelectSingleNode(Convert.ToString(ViewState["datapath"]));
                       XmlNode rootElement = xmldoc.SelectSingleNode(xmlpath1);
                       string nodes = TextBox1.Text.ToString().Trim();
                       if (nodes != null)
                       {
                           XmlElement websiteElement = xmldoc.CreateElement(nodes);//创建一个<nodes>节点
                           int Childcount = xmldoc.DocumentElement.ChildNodes.Count;
                           Childcount++;
                           websiteElement.SetAttribute("guestID", Childcount.ToString());//设置该节点guestID属性
                           string Elements = TextBox2.Text.ToString().Trim();
                           XmlElement nameElement = xmldoc.CreateElement(Elements);//设置元素(名称)
                           nameElement.InnerText = TextBox3.Text;//设置文本节点  
                           nameElement.SetAttribute("Value",DateTime.Now.ToString("yyyyMMddhhmmss"));

                           websiteElement.AppendChild(nameElement);//添加到<nodes>节点中

                           rootElement.AppendChild(nameElement);//添加到<Websites>节点中
                           nav.AppendChild();
                           //保存创建好的XML文档
                           xmldoc.Save(Server.MapPath("~//App_data//" + xmlpath));
                           Response.Redirect(Request.RawUrl);

                       }
                       else
                       {
                           Response.Write("<cscript>alert('添加子节点不能为空!')</script>");
                       }
                   }
               }
               while (nav.MoveToNext()) ;
         }
                 
        //}
      
  存在问题是:每次点击(下面某一个节点)与上一个节点(或元素)名 相同的话

就后去不到 下一个节点的属性和文本值????????????????

谁做过类似的东西 给我看看 错在那里。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值