目录
XML
可扩展的标记语言 存储数据
1、所有的xml标签都以尖括号<>括起来,尖括号是成对出现的
2、操作xml文件的类叫:XDocument
命名空间:System.Xml.Linq;
3、加载已有的xml文件:xd = XDocument.Load(path);
4、得到xml文件的根元素
XElement xroot = xd.Element("root");
1、通过代码创建XML文档
//创建Xml文件
//1、创建XDocument对象
XDocument xdNew = new XDocument();
//2、创建XDocument的声明
XDeclaration xdeclare = new XDeclaration("1.0", "utf-8", null);
//3、将声明赋值给document
xdNew.Declaration = xdeclare;
//4、创建根节点
XElement xroot = new XElement("Root");
//5、创建Student节点
XElement xStu = new XElement("Student");
//6、为Student节点添加name节点
xStu.Add(new XElement("name", "张三"));
//7、添加性别节点
XElement xSex = new XElement("sex", "男");
xStu.Add(xSex);
//8、添加年龄节点
xStu.Add(new XElement("age", 16));
//9、把xStu添加到Root节点下
xroot.Add(xStu);
XElement xStu2 = new XElement("Student");
xStu2.Add(new XElement("name", "孙的"));
xStu2.Add(new XElement("sex", "女"));
xStu2.Add(new XElement("age", "18"));
xroot.Add(xStu2);
//10、将xroot节点添加到document下
xdNew.Add(xroot);
//11、保存xdocument文件
xdNew.Save(path);
2、读取xml文档中的内容:
读取XML文件:
XDocument xd = XDocument.Load(path);
//相对路径
//string strPath = Application.StartupPath + @"\test.xml";
string strPath = AppDomain.CurrentDomain.BaseDirectory + @"\test.xml";
//读取xml文件
//1、先判断文件是否存在
if (File.Exists(strPath))
{
//将文件读取出来,把数据赋值个Dgv
//实例化一个Document对象,对xml文件操作 //加载xml文件
XDocument xd=XDocument.Load(strPath);
//读取文档的根节点
XElement xroot = xd.Element("root");
//根据根节点获取根节点下的元素
List<XElement> lst = xroot.Elements().ToList(); //
foreach (var item in lst)
{
//string id = item.Attribute("id").Value;
//MessageBox.Show(id);
//姓名
string name = item.Element("name").Value;
string sex = item.Element("sex").Value; //性别
int age = Convert.ToInt32(item.Element("age").Value); //年龄
Student stu = new Student();
stu.Name = name;
stu.Sex = sex;
stu.Age = age;
lsStudents.Add(stu);
}
//Dgv绑定数据源
BindingSource bind = new BindingSource();
bind.DataSource = lsStudents;
dataGridView1.DataSource = bind;
3、添加属性:
//1、加载Xdocument
XDocument xd = XDocument.Load(path);
//2、获取根节点
XElement xroot = xd.Element("Root");
//3、获取出学生集合
List<XElement> lst = xroot.Elements().ToList();
for (int i = 0; i < lst.Count; i++)
{
//创建一个属性,名叫id
XAttribute xid = new XAttribute("Id", i + 1);
//4、为每一个学生添加上id属性
lst[i].Add(xid);
xroot.Add(lst[i]);
}
//5、保存文档
xd.Save(path);
4、修改元素:
//1、加载Xdocument
XDocument xd = XDocument.Load(path);
//2、获取根节点
XElement xroot = xd.Element("Root");
//3、获取出学生集合
List<XElement> lst = xroot.Elements().ToList();
for (int i = 0; i < lst.Count; i++)
{
lst[i].Element("name").Value = lst[i].Element("name").Value + "中国";
lst[i].Attribute("Id").Value = (Convert.ToInt32(lst[i].Attribute("Id").Value) + 1).ToString();
}
//5、保存文档
xd.Save(path);
5、读取带属性的XML
//1、加载Xdocument
XDocument xd = XDocument.Load(path);
//2、获取根节点
XElement xroot = xd.Element("Root");
//3、获取出学生集合
List<XElement> lst = xroot.Elements().ToList();
for (int i = 0; i < lst.Count; i++)
{
string id=lst[i].Attribute("Id").Value;
MessageBox.Show(id);
}
eg:获取学员信息
Student.xml
<?xml version="1.0" encoding="utf-8" ?>
<root>
<student id="1">
<name>张三三</name>
<age>3</age>
<sex>男</sex>
</student>
<student id="2">
<name>李四四</name>
<age>4</age>
<sex>女</sex>
</student>
<student id="3">
<name>王五五</name>
<age>5</age>
<sex>男</sex>
</student>
</root>
namespace XMLDemo
{
public partial class Form1 : Form
{
XDocument xd;
string path = @"D:\wokspace_Ma\Day20zy_machenxi\XMLDemo\Student.xml";
//string path = "Student.xml";
//不能直接写Student.xml,那样地址为D:\wokspace_Ma\Day20zy_machenxi\XMLDemo\bin\Debug\...
public Form1()
{
InitializeComponent();
}
private void btnRead_Click(object sender, EventArgs e)
{
if (File.Exists(path))
{
xd = XDocument.Load(path);
XElement xe = xd.Element("root");
List<XElement> lst = xe.Elements().ToList();
foreach (XElement item in lst)
{
string strName = item.Element("name").Value.ToString();
string strAge = item.Element("age").Value.ToString();
string strSex = item.Element("sex").Value.ToString();
winform中的占位符:Format
string str = string.Format("姓名:{0},年龄:{1},性别:{2}。", strName, strAge, strSex);
listBox1.Items.Add(str);
}
}
else
{
MessageBox.Show("地址有误");
//string fullPath= Path.GetFullPath(path);
//MessageBox.Show(fullPath);
}
}
}