以前总是从xml中读取字段,来做简单的使用,譬如这次我在一个xml文件中存放了一些几个部门的信息,我以为只是简单的读取呢,后来才发现还需要有一个部门管理的界面,就是可以对部门进行修改、删除、增加的操作。所以有点发懵了,就这这次 机会,又简单的研究了一下发现了一些知识点:
xml文档结构图如下:
1)查看所有(增加数据的时候可用于检索是否有相同值)
XmlDocument xml = new XmlDocument(); xml.Load(Server.MapPath(" ~/dept.xml")); XmlNodeList nodeList = xml.GetElementsByTagName("*"); foreach (XmlNode xn in nodeList)//遍历所有子节点 { if (xn.Name == "dept") { for (int i = 0; i < xn.ChildNodes.Count; i++) { Response.Write(xn.ChildNodes[i]["name"].InnerText+ "<br/>"); } } }
上面的代码主要是创建一个xmldocument对象xml,把dept.xml赋给这个xml。其中dept是根节点,然后是上面这段代码的主要功能是循环输出dept下子节点的name属性的值。这个主要是我用来检测添加部门的时候是否有重复的部门名称的时候需要使用的,假如有相同的则给出提示。
2)删除特定的子节点,然后在保存到xml文档中去。
XmlDocument xml = new XmlDocument(); xml.Load(Server.MapPath(" ~/dept.xml")); XmlNodeList nodeList = xml.GetElementsByTagName("*"); foreach (XmlNode xn in nodeList)//遍历所有子节点 { if (xn.Name == "dept") { xn.RemoveChild(xn.ChildNodes[1]); break; } } xml.Save(Server.MapPath("~") + "dept.xml");
3)添加xml节点
if (!string.IsNullOrEmpty(TextBox1.Text)) { XmlDocument xml = new XmlDocument(); xml.Load(Server.MapPath(" ~/dept.xml")); XmlNodeList nodeList = xml.GetElementsByTagName("*"); foreach (XmlNode xn in nodeList)//遍历所有子节点 { if (xn.Name == "dept") { int i = Convert.ToInt32(xn.LastChild["value"].InnerText); xn.InnerXml += "<deptname><name>" + TextBox1.Text + "</name><value>" + i + 1 + "</value></deptname>";//为xml文档添加一个节点 break; } } xml.Save(Server.MapPath("~") + "dept.xml"); ClientScript.RegisterClientScriptBlock(GetType(),"","<script>alert('添加成功!');</script>"); } else { ClientScript.RegisterClientScriptBlock(GetType(),"<script>alert('部门名称不允许为空!');</script>"); }