使用XmlDocument类完成对XML的查、删、添、改

使用XmlDocument类完成对XML的查、删、添、改

http://www.aspdiy.net/article/53.htm

后台C#代码
  1using System;
  2using System.Collections;
  3using System.ComponentModel;
  4using System.Data;
  5using System.Drawing;
  6using System.Web;
  7using System.Web.SessionState;
  8using System.Web.UI;
  9using System.Web.UI.WebControls;
10using System.Web.UI.HtmlControls;
11//新引入两个命名空间
12using System.Xml;
13using System.Xml.XPath;
14
15namespace XML
16{
17    /**//// <summary>
18    /// xdoc 的摘要说明。
19    /// </summary>
20    public class xdoc : System.Web.UI.Page
21    {
22        protected System.Web.UI.WebControls.Label Label1;
23        protected System.Web.UI.WebControls.Label Label2;
24        protected System.Web.UI.WebControls.Button Button1;
25        protected System.Web.UI.WebControls.Label Label3;
26        protected System.Web.UI.WebControls.Button Button2;
27        protected System.Web.UI.WebControls.Button Button3;
28        protected System.Web.UI.WebControls.DataGrid dg;
29        protected System.Web.UI.WebControls.DropDownList ddl;
30        protected System.Web.UI.WebControls.TextBox tbn;
31        protected System.Web.UI.WebControls.Label Label4;
32        protected System.Web.UI.WebControls.Label Label5;
33        protected System.Web.UI.WebControls.Label Label6;
34        protected System.Web.UI.WebControls.TextBox tbna;
35        protected System.Web.UI.WebControls.TextBox tbc;
36        protected System.Web.UI.WebControls.TextBox tbe;
37        protected System.Web.UI.WebControls.Button Button4;
38    
39        private void Page_Load(object sender, System.EventArgs e)
40        {//看动作名字就知道了是载入了
41            if(!Page.IsPostBack)
42            {
43                fill();
44            }
45        }
46
47        Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
48        override protected void OnInit(EventArgs e)
49        {
50            //
51            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
52            //
53            InitializeComponent();
54            base.OnInit(e);
55        }
56        
57        /**//// <summary>
58        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
59        /// 此方法的内容。
60        /// </summary>
61        private void InitializeComponent()
62        {    
63            this.Button1.Click += new System.EventHandler(this.Button1_Click);
64            this.Button2.Click += new System.EventHandler(this.Button2_Click);
65            this.Button3.Click += new System.EventHandler(this.Button3_Click);
66            this.Button4.Click += new System.EventHandler(this.Button4_Click);
67            this.Load += new System.EventHandler(this.Page_Load);
68
69        }
70        #endregion
71
72        private void fill()
73        {//绑定方法
74            DataSet ds=new DataSet();
75            ds.ReadXml(Server.MapPath("\\xml\\xml\\doc.xml"));
76            dg.DataSource=ds.Tables[0];
77            dg.DataBind();
78            XmlDocument xd=new XmlDocument();
79            xd.Load(Server.MapPath("\\xml\\xml\\doc.xml"));
80            System.Xml.XmlNodeList xnl=xd.GetElementsByTagName("Name");
81            ddl.Items.Clear();
82            for(int i=0;i<xnl.Count;i++)
83            {
84                ddl.Items.Add(xnl[i].InnerText);
85            }
86        }
87
88        private void Button1_Click(object sender, System.EventArgs e)
89        {//查询动作
90            XmlDocument xd=new XmlDocument();
91            xd.Load(Server.MapPath("\\xml\\xml\\doc.xml"));
92            tbn.Text=xd.SelectSingleNode("//User[Name='"+ddl.SelectedItem.Text+"']").ChildNodes.Item(2).InnerText.ToString();
93
94        }
95
96        private void Button2_Click(object sender, System.EventArgs e)
97        {//删除动作
98            XmlDocument xdoc=new XmlDocument();
99            xdoc.Load(Server.MapPath("\\xml\\xml\\doc.xml"));
100            XmlNodeList xnl=xdoc.SelectSingleNode("dbGuest").ChildNodes;
101            
102            foreach(XmlNode xn in xnl)
103            {
104                XmlElement xe=(XmlElement)xn;
105                XmlNodeList node=xe.GetElementsByTagName("Name");//查找他的Name行
106                if(node.Count>0)
107                {
108                    if(node[0].InnerText==ddl.SelectedItem.Text)//如果当前节点的名字和下拉列表传来的一样,就删除
109                    {
110                        xe.RemoveAll();//删除节点的所有指定属性和子集,但是不删除默认属性,我很郁闷,不知道怎么连属性一起删除,如果有朋友知道,请一定告诉我下,谢谢了!
111
112                    }
113                    break;
114                }
115
116            }
117            xdoc.Save(Server.MapPath("\\xml\\xml\\doc.xml"));
118            fill();
119        }
120
121        private void Button3_Click(object sender, System.EventArgs e)
122        {//添加动作
123            string name=this.tbna.Text.ToString();
124            string city=this.tbc.Text.ToString();
125            string email=this.tbe.Text.ToString();
126            
127            XmlDocument xd=new XmlDocument();
128            xd.Load(Server.MapPath("\\xml\\xml\\doc.xml"));
129            //查找dbGuest节点
130            XmlNode xn=xd.SelectSingleNode("dbGuest");
131            //创建user节点
132            XmlElement xe_u=xd.CreateElement("User");
133            //创建一个name元素
134            XmlElement xe_a1=xd.CreateElement("Name");
135            xe_a1.InnerText=name;//设置该元素的值
136            xe_u.AppendChild(xe_a1);//把刚才创建的元素插入name节点里面去
137            XmlElement xe_a2=xd.CreateElement("City");
138            xe_a2.InnerText=city;
139            xe_u.AppendChild(xe_a2);
140            XmlElement xe_a3=xd.CreateElement("Email");
141            xe_a3.InnerText=email;
142            xe_u.AppendChild(xe_a3);
143            XmlElement xe_a4=xd.CreateElement("Time");
144            xe_a4.InnerText=(DateTime.Now).ToString();
145            xe_u.AppendChild(xe_a4);
146            //将User节点插入到dbGuest
147            xn.AppendChild(xe_u);
148            //保存XML文件
149            xd.Save(Server.MapPath("\\xml\\xml\\doc.xml"));
150            fill();
151        }
152
153        private void Button4_Click(object sender, System.EventArgs e)
154        {//修改邮件地址动作
155            XmlDocument xd=new XmlDocument();
156            xd.Load(Server.MapPath("\\xml\\xml\\doc.xml"));//载入XML文件
157            XmlNodeList xnl=xd.SelectSingleNode("dbGuest").ChildNodes;//获取dbGuest节点的全部子节点
158            foreach(XmlNode xn in xnl)//迭代所有子节点
159            {
160                XmlElement xe=(XmlElement)xn;//将迭代到的子节点转换成XmlElement类型
161                XmlNodeList xnl2=xe.GetElementsByTagName("Name");//返回所有Name列的数据
162                if(xnl2.Count>0)//如果大于零就表示有撒,
163                {
164                    if(xnl2[0].InnerText==ddl.SelectedItem.Text)//如果该列有和被下拉列表中返回的值一样的数据的话
165                    {
166                        XmlNodeList xnl3=xe.ChildNodes;//再获取下面所有的子节点
167                        foreach(XmlNode xn1 in xnl3)//再迭代子集
168                        {
169                            XmlElement xe2=(XmlElement)xn1;//转换类型
170                            if(xe2.Name=="Email")//如果节点名字是Email的话
171                            {
172                                xe2.InnerText=tbn.Text;//该节点的值就替换成文本框中的
173                                break;
174                            }
175                        }
176                        break;
177                    }
178                }
179            }
180            xd.Save(Server.MapPath("\\xml\\xml\\doc.xml"));
181            fill();
182        }
183    }
184}
185
XML文件代码
1<?xml version="1.0" encoding="utf-8"?>
2<dbGuest>
3  <User>
4    <Name></Name>
5    <City>江油</City>
6    <Email>7665@fds.com</Email>
7    <Time>2006-5-6 16:10:56</Time>
8  </User>
9  <User>
10    <Name></Name>
11    <City>绵阳</City>
12    <Email>th@DFs.com</Email>
13    <Time>2006-5-6 16:06:51</Time>
14  </User>
15  <User>
16    <Name>黄小梅</Name>
17    <City>南充</City>
18    <Email>5543@ds.com</Email>
19    <Time>2006-5-6 16:07:15</Time>
20  </User>
21</dbGuest>

原文地址:https://www.cnblogs.com/carl2380/p/1915688.html