xml文件格式
<?xml version="1.0" encoding="utf-8"?> <messageList> <message id="1"> <Name>熊猫</Name> <QQ>123456</QQ> <Email>panda@qq.com</Email> <Content>asfdsafasdfasdfsad我是内容</Content> <Time>2009-10-1</Time> </message> </messageList>
1.添加
XmlDocument xmld = new XmlDocument(); xmld.Load(Server.MapPath("App_Code/Message.xml"));//加载xml文件 XmlNode root = xmld.SelectSingleNode("messageList");//查找messageList节点 int i = xmld.SelectSingleNode("messageList").ChildNodes.Count + 1; XmlElement xml0 = xmld.CreateElement("message"); xml0.SetAttribute("id", i.ToString()); XmlElement xml1 = xmld.CreateElement("Name");//创建一个Name节点 xml1.InnerText = this.txtName.Value.Trim(); xml0.AppendChild(xml1);//添加 XmlElement xml2 = xmld.CreateElement("QQ");//创建QQ节点 xml2.InnerText = this.txtQQ.Value.Trim(); xml0.AppendChild(xml2);//添加 XmlElement xml3 = xmld.CreateElement("Email");//创建一个Email节点 xml3.InnerText = this.txtEmail.Value.Trim(); xml0.AppendChild(xml3);//添加 XmlElement xml4 = xmld.CreateElement("Content");//创建一个Content节点 xml4.InnerText = this.txtContent.Value; xml0.AppendChild(xml4);//添加 XmlElement xml5 = xmld.CreateElement("Time");//创建一个Time节点 xml5.InnerText = DateTime.Now.ToString("yyyy-MM-dd"); xml0.AppendChild(xml5);//添加 root.AppendChild(xml0); xmld.Save(Server.MapPath("App_Code/Message.xml"));
删除
XmlDocument xmld = new XmlDocument(); xmld.Load(Server.MapPath("App_Code/Message.xml")); XmlNodeList list = xmld.SelectSingleNode("messageList").ChildNodes; foreach (XmlNode var in list) { XmlElement xmle = (XmlElement)var; if (xmle.GetAttribute("id") == Id)//如果ID等于文本的值就删除 { xmle.RemoveAll(); xmld.Save(Server.MapPath("App_Code/Message.xml"));//删除后记得一定要保存 Page.ClientScript.RegisterStartupScript(GetType(), "", "alert('删除成功!!');", true); } else { Page.ClientScript.RegisterStartupScript(GetType(), "", "alert('删除失败!!');", true); } }
更改
XmlDocument xmld = new XmlDocument(); xmld.Load(Server.MapPath("App_Code/Message.xml")); XmlNodeList list = xmld.SelectSingleNode("messageList").ChildNodes; foreach (XmlNode xmln in list) { XmlElement xmle = (XmlElement)xmln;//格式转换 if (Request["ID"].Equals(xmle.GetAttribute("id"))) { xmle.ChildNodes[0].InnerText = this.txtName.Value; xmle.ChildNodes[1].InnerText = this.txtQQ.Value; xmle.ChildNodes[2].InnerText = this.txtEmail.Value; xmle.ChildNodes[3].InnerText = this.txtContent.Value; xmld.Save(Server.MapPath("App_Code/Message.xml")); Page.ClientScript.RegisterStartupScript(this.GetType(), "", "alert('修改成功!!!');location.href='MessageList.aspx'",true); } }
查找
//下面的代码开始是用页面编码的方式实现的 XmlDocument xmld = new XmlDocument();//构建xml文档 xmld.Load(Server.MapPath("App_Code/Message.xml"));//加载 XmlNodeList list = xmld.SelectSingleNode("messageList").ChildNodes;//获取子节点 if (list!=null) { foreach (XmlNode node in list) { XmlElement xmle = (XmlElement)node;//转换
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;namespace Doxml
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}//插入节点
private void button1_Click(object sender, EventArgs e)
{
//<book genre="李赞红" ISBN="2-3631-4">
// <title>CS从入门到精通</title>
// <author>候捷</author>
// <price>58.3</price>
//</book>XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"D:\XMLFile.xml");
XmlNode root = xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>XmlElement xe1 = xmlDoc.CreateElement("book");//创建一个<book>节点
xe1.SetAttribute("genre", "李赞红");//设置该节点genre属性
xe1.SetAttribute("ISBN", "2-3631-4");//设置该节点ISBN属性XmlElement xesub1 = xmlDoc.CreateElement("title");
xesub1.InnerText = "CS从入门到精通";//设置文本节点
//AppendChild 将指定的节点添加到该节点的子节点列表的末尾。
xe1.AppendChild(xesub1);//添加到<book>节点中XmlElement xesub2 = xmlDoc.CreateElement("author");
// InnerText 获取或设置节点及其所有子级的串联值。 如果该节点下面含有串联的子级则予以全部覆盖指定的文本内容
xesub2.InnerText = "候捷";
xe1.AppendChild(xesub2);
XmlElement xesub3 = xmlDoc.CreateElement("price");
xesub3.InnerText = "58.3";
xe1.AppendChild(xesub3);
root.AppendChild(xe1);//添加到<bookstore>节点中
xmlDoc.Save(@"D:\XMLFile.xml");}
//修改节点
private void button2_Click(object sender, EventArgs e)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"D:\XMLFile.xml");
XmlNodeList nodeList = xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
foreach (XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
if (xe.GetAttribute("genre") == "李赞红")//如果genre属性值为“李赞红”
{
xe.SetAttribute("genre", "update李赞红");//则修改该属性为“update李赞红”XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
foreach (XmlNode xn1 in nls)//遍历
{
XmlElement xe2 = (XmlElement)xn1;//转换类型
if (xe2.Name == "author")//如果找到
{
xe2.InnerText = "亚胜";//则修改
break;//找到退出来就可以了
}
}
break;
}
}xmlDoc.Save(@"D:\XMLFile.xml");//保存。
}
//删除节点
private void button3_Click(object sender, EventArgs e)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"D:\XMLFile.xml");
//XmlNodeList 排序的结点集合 ChildNodes 获取指定节点下的子节点
XmlNodeList xnl = xmlDoc.SelectSingleNode("bookstore").ChildNodes;//XmlNode表示XML文档中的单个节点
foreach (XmlNode xn in xnl)
{
//将节点转化为一个元素
XmlElement xe = (XmlElement)xn;
//提取指定属性值的元素,予以删除属性
if (xe.GetAttribute("genre") == "fantasy")
{
//移除属性
xe.RemoveAttribute("genre");//删除genre属性
}
else if (xe.GetAttribute("genre") == "update李赞红")
{
//移除指定节点下的内容,包括其子节点
xe.RemoveAll();//删除该节点的全部内容
}
}
xmlDoc.Save(@"D:\XMLFile.xml");
}//提取内容
private void button4_Click(object sender, EventArgs e)
{
richTextBox1.Clear();
richTextBox1.LoadFile(@"D:\XMLFile.xml",RichTextBoxStreamType.PlainText);
}
}
}运行界面如下:
在.NET中使用DataSet来获取XML数据与保存XML数据很简单,很好用,不过有一些复杂点的XML结构,使用DataSet来操作就没有XmlDocument来操作这么好用了,所以本文在C#使用XmlDocument来操作XML的查询、增加、修改、删除、保存的基本操作。
下面看实例:
XML文件:books.xml
下面是C#代码: