1、写入xml文档
class Program
{
static void Main(string[] args)
{
List<Person> list = new List<Person>();
list.Add(new Person() { Age=18,Gender="男",Name="张三",Id="001"});
list.Add(new Person() { Age = 18,Gender = "男",Name = "李四",Id = "002" });
list.Add(new Person() { Age = 18,Gender = "女",Name = "王五",Id = "003" });
list.Add(new Person() { Age = 18,Name = "赵六",Id = "004" });
XDocument xdoc = new XDocument();
//创建根元素
XElement root = new XElement("Person");
for (int i = 0; i < list.Count; i++)
{
XElement student = new XElement("student");
//给student 设置属性
student.SetAttributeValue("Id",list[i].Id);
student.SetElementValue("name",list[i].Name);
student.SetElementValue("gender",list[i].Gender);
student.SetElementValue("age",list[i].Age.ToString());
root.Add(student);//节点添加到根节点中
}
//把根元素添加都文件夹中
xdoc.Add(root);
xdoc.Save("person2.xml");
Console.WriteLine("xml文档写入完成");
Console.ReadKey();
}
}
2、读取XML文件练习
//加载文档
XDocument xdoc = XDocument.Load("bank.xml");
//遍历根节点下所有的子节点
foreach (XElement item in xdoc.Root.Elements())
{
Console.WriteLine(item.Name);
//遍历二级标签
foreach (XElement ele in item.Elements())
{
//打印输出二级标签的名称和对应的值
Console.WriteLine(ele.Name+"====="+ele.Attribute("val").Value);
}
}
Console.WriteLine("OK");
Console.ReadKey();
3、遍历XML文件
private void Form2_Load(object sender,EventArgs e)
{
//在窗体加载的时候 读取xml文件
XDocument xdoc = XDocument.Load("11.xml");
//获取根节点(Root获取文档的xml树的元素)
XElement root = xdoc.Root;
//将根元素的名字显示到控件的根节点上
TreeNode tn = treeView1.Nodes.Add(root.Name.ToString());
//现在,根节点已经添加进来了,下面的根节点还有好多子节点,我们需要通过一个循环将他们查询并显示出来
LoadXElement(root,tn);
}
private void LoadXElement(XElement root,TreeNode tn)
{
//遍历根元素下所有的子节点
foreach (XElement item in root.Elements())
{
//判断当前这个节点元素下是否还有元素
if (item.Elements().Count() > 0)
{
TreeNode tn1 = tn.Nodes.Add(item.Name.ToString());
LoadXElement(item,tn1);
}
else //如果没有,则直接显示当前
{
tn.Nodes.Add(item.Value);
}
}
}
4、XML增删改查
private void Form1_Load(object sender,EventArgs e)
{
//读取所有的客户信息
LoadUserInfo();
}
/// <summary>
/// 读取所有用户的信息
/// </summary>
private void LoadUserInfo()
{
//创建一个集合,来存储对象的数据
List<User> list = new List<User>();
XDocument xdoc = XDocument.Load("haodongxi.xml");
//获取根元素,遍历该根元素下的所有子元素,并把所有的子元素添加到一个User 类型的集合中
foreach (XElement user in xdoc.Root.Elements())
{
list.Add(new User() { Age = user.Element("age").Value,Gender = user.Element("gender").Value,Id = user.Attribute("id").Value,Name = user.Element("name").Value,Password = user.Element("password").Value });
}
//绑定数据源
dgv.DataSource = list;
//先判断第一行是否有数据
if (dgv.Rows.Count>0)
{
dgv.SelectedRows[0].Selected = false;//禁止第一行选中
}
}
/// <summary>
/// 添加用户信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnAdd_Click(object sender,EventArgs e)
{
//获取姓名,性别,年龄,密码,id
//所有的数据都添加到xml文件中
//读取xml文件,获取根节点,向根元素中添加子节点
XDocument xdoc = XDocument.Load("haodongxi.xml");
XElement root = xdoc.Root;//根元素
//创建子元素
XElement user = new XElement("user");
user.SetAttributeValue("id",txtId.Text.Trim());//id
user.SetElementValue("name",txtName.Text.Trim());//姓名
user.SetElementValue("password",txtPwd.Text.Trim());//密码
string gender = rdoMan.Checked ? "男" : "女";
gender = rdoWoman.Checked ? "女" : "男";
user.SetElementValue("gender",gender);
user.SetElementValue("age",txtAge.Text.Trim());
//把子元素添加懂啊根元素中
root.Add(user);
xdoc.Save("haodongxi.xml");
MessageBox.Show("操作成功");
//刷新
LoadUserInfo();
}
/// <summary>
/// 右键删除
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tsmiDelete_Click(object sender,EventArgs e)
{
//删除之前判断是否有选中行
if (dgv.SelectedRows.Count>0) //有选中的
{
//获取选中行的id,获取的是选中的第一行中第一个单元格中值
string id = dgv.SelectedRows[0].Cells[0].Value.ToString();
//根据id去xml文件中查找user标签
XDocument xdoc = XDocument.Load("haodongxi.xml");
XElement root = xdoc.Root;
XElement ele = root.Elements("user").Where(x => x.Attribute("id").Value == id).Single();
ele.Remove();//删除选中的节点
xdoc.Save("haodongxi.xml");
MessageBox.Show("操作成功");
LoadUserInfo();
}
else
{
MessageBox.Show("看准目标再下手");
}
}
/// <summary>
/// 单击单元格时发生
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgv_CellClick(object sender,DataGridViewCellEventArgs e)
{
txtUId.Text = dgv.SelectedRows[0].Cells[0].Value.ToString();
txtUName.Text = dgv.SelectedRows[0].Cells[1].Value.ToString();//姓名
txtUPwd.Text = dgv.SelectedRows[0].Cells[2].Value.ToString();//密码
txtUAge.Text = dgv.SelectedRows[0].Cells[3].Value.ToString();//年龄
string gender = dgv.SelectedRows[0].Cells[4].Value.ToString();
rdoMan.Checked = gender == "男" ? true : false;
rdoUWoman.Checked = gender == "女" ? true : false;
}
/// <summary>
/// 修改数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnUpdate_Click(object sender,EventArgs e)
{
//判断是否有选中的行
if (dgv.SelectedRows.Count>0) //选中
{
//读取xml文件,获取根元素,在根元素中查找id是什么的user标签
XDocument xdoc = XDocument.Load("haodongxi.xml");
//获取根元素
XElement root = xdoc.Root;
//查找所有的user元素
XElement ele = root.Elements("user").Where(xy => xy.Attribute("id").Value == txtUId.Text).Single();
ele.SetElementValue("name",txtUName.Text.Trim());//姓名
ele.SetElementValue("age",txtUAge.Text.Trim());//年龄
ele.SetElementValue("password",txtUPwd.Text.Trim());//密码
string gender = rdoUMan.Checked ? "男" : "女";
gender = rdoUWoman.Checked ? "女" : "男";
ele.SetElementValue("gender",gender);//性别
//修改完成后,保存xml文件
xdoc.Save("haodongxi.xml");
//给出提示
MessageBox.Show("修改成功");
//重新加载页面
LoadUserInfo();
}
else //没有选中
{
MessageBox.Show("请选中要修改的行");
}
}