终于静下心来学习LinqToXml,虽然说不复杂,但对我这种菜鸟来说,还是遇到一些问题,经过不懈努力的baidu,google之后,学习了很多人的经验教训,也摘录了很多人的代码,终于有点眉目。在此把做好的一个实例分享出来。
//查询绑定
Code
private void BindPerson()
{
// 加载指定的xml文件
XDocument xml = XDocument.Load("http://www.cnblogs.com/Sample1.xml");
// 使用查询语法获取Person集合
var persons = from p in xml.Root.Elements("person")
select new
{
Name = p.Element("name").Value,
Age = int.Parse(p.Element("age").Value),
Salary = p.Element("salary").Value
};
if (!string.IsNullOrEmpty(this.txtName.Text))
persons = from e in persons
where e.Name.Contains(this.txtName.Text)
select e;
if (!string.IsNullOrEmpty(this.txtAge.Text))
{
persons = from e in persons
where (int)e.Age >= int.Parse(this.txtAge.Text.Trim())
select e;
}
this.dataGridView1.DataSource = persons.ToList();
}
private void BindPerson()
{
// 加载指定的xml文件
XDocument xml = XDocument.Load("http://www.cnblogs.com/Sample1.xml");
// 使用查询语法获取Person集合
var persons = from p in xml.Root.Elements("person")
select new
{
Name = p.Element("name").Value,
Age = int.Parse(p.Element("age").Value),
Salary = p.Element("salary").Value
};
if (!string.IsNullOrEmpty(this.txtName.Text))
persons = from e in persons
where e.Name.Contains(this.txtName.Text)
select e;
if (!string.IsNullOrEmpty(this.txtAge.Text))
{
persons = from e in persons
where (int)e.Age >= int.Parse(this.txtAge.Text.Trim())
select e;
}
this.dataGridView1.DataSource = persons.ToList();
}
//新增
Code
private void cmdAdd_Click(object sender, EventArgs e)
{
try
{
int age = 0;
if (!string.IsNullOrEmpty(this.txtAge.Text))
age = int.Parse(this.txtAge.Text.Trim());
// 加载指定的xml文件
XDocument xml = XDocument.Load("http://www.cnblogs.com/Sample1.xml");
// 创建需要新增的XElement对象
XElement person = new XElement(
"person",
new XElement("name", txtName.Text),
new XElement("age", age),
new XElement("salary", txtSalary.Text));
// 添加需要新增的XElement对象
xml.Root.Add(person);
// 保存xml
xml.Save("http://www.cnblogs.com/Sample1.xml");
BindPerson();
}
catch
{
MessageBox.Show("新增失败!");
}
}
private void cmdAdd_Click(object sender, EventArgs e)
{
try
{
int age = 0;
if (!string.IsNullOrEmpty(this.txtAge.Text))
age = int.Parse(this.txtAge.Text.Trim());
// 加载指定的xml文件
XDocument xml = XDocument.Load("http://www.cnblogs.com/Sample1.xml");
// 创建需要新增的XElement对象
XElement person = new XElement(
"person",
new XElement("name", txtName.Text),
new XElement("age", age),
new XElement("salary", txtSalary.Text));
// 添加需要新增的XElement对象
xml.Root.Add(person);
// 保存xml
xml.Save("http://www.cnblogs.com/Sample1.xml");
BindPerson();
}
catch
{
MessageBox.Show("新增失败!");
}
}
//修改
Code
private void cmdModify_Click(object sender, EventArgs e)
{
try
{
// 加载指定的xml文件
XDocument xml = XDocument.Load("http://www.cnblogs.com/Sample1.xml");
// 使用查询语法获取指定的Person集合
var persons = from p in xml.Root.Elements("person")
where p.Element("name").Value == this.txtName.Text
select p;
// 更新指定的XElement对象
foreach (XElement xe in persons)
{
xe.SetElementValue("age", this.txtAge.Text);
xe.SetElementValue("salary", this.txtSalary.Text);
}
// 保存xml
xml.Save("http://www.cnblogs.com/Sample1.xml");
BindPerson();
}
catch
{
MessageBox.Show("修改失败!");
}
}
private void cmdModify_Click(object sender, EventArgs e)
{
try
{
// 加载指定的xml文件
XDocument xml = XDocument.Load("http://www.cnblogs.com/Sample1.xml");
// 使用查询语法获取指定的Person集合
var persons = from p in xml.Root.Elements("person")
where p.Element("name").Value == this.txtName.Text
select p;
// 更新指定的XElement对象
foreach (XElement xe in persons)
{
xe.SetElementValue("age", this.txtAge.Text);
xe.SetElementValue("salary", this.txtSalary.Text);
}
// 保存xml
xml.Save("http://www.cnblogs.com/Sample1.xml");
BindPerson();
}
catch
{
MessageBox.Show("修改失败!");
}
}
//删除
Code
private void cmdDelete_Click(object sender, EventArgs e)
{
try
{
// 加载指定的xml文件
XDocument xml = XDocument.Load("http://www.cnblogs.com/Sample1.xml");
// 使用查询语法获取指定的Person集合
var persons = from p in xml.Root.Elements("person")
where p.Element("name").Value == this.txtName.Text
select p;
// 删除指定的XElement对象
persons.Remove();
// 保存xml
xml.Save("http://www.cnblogs.com/Sample1.xml");
BindPerson();
}
catch
{
MessageBox.Show("删除失败");
}
}
private void cmdDelete_Click(object sender, EventArgs e)
{
try
{
// 加载指定的xml文件
XDocument xml = XDocument.Load("http://www.cnblogs.com/Sample1.xml");
// 使用查询语法获取指定的Person集合
var persons = from p in xml.Root.Elements("person")
where p.Element("name").Value == this.txtName.Text
select p;
// 删除指定的XElement对象
persons.Remove();
// 保存xml
xml.Save("http://www.cnblogs.com/Sample1.xml");
BindPerson();
}
catch
{
MessageBox.Show("删除失败");
}
}
//xml文件:
Code
<?xml version="1.0" encoding="utf-8"?>
<root>
<person>
<name>test</name>
<age>23</age>
<salary>1111</salary>
</person>
<person>
<name>小王</name>
<age>30</age>
<salary>6000</salary>
</person>
</root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<person>
<name>test</name>
<age>23</age>
<salary>1111</salary>
</person>
<person>
<name>小王</name>
<age>30</age>
<salary>6000</salary>
</person>
</root>
源代码下载地址:/Files/gjahead/LinqToXml.rar