作为vs自带的XML格式文件,方便,轻便,记事本浏览器都能打开,作为配置文件,保存数据使用非常方便
//XML文档:可标记扩展语言------用来做数据的存储,还可以添加对数据的描述
//存储文本内容,可以用记事本打开
//任何平台都兼容 可以做数据交换的载体
//文档内,节点,元素,属性,文本内容
//文本内容才是存储的数据
// XML 格式
// 标签要闭合-------开始标签和结束标签配对
//有且只一个根节点。每一个子节点下也可以有多个子节点
//节点名称区分大小写,属性的值必须加"",
//文档的注释:<!---->
//注意编码格式的统一,默认是UTF-8
//<![CDATA[]]>------- 存储的数据包含特殊字符
//XML命名规范
//可以包含字母数字,其他字符,
//不能以数字开头,不能以逗号开头,不能是XML 不能是空格
//元素和节点
//元素和节点的区别,元素肯定是节点,节点不一定是元素
下面我们创建一个XML文档
<?xml version="1.0" encoding="utf-8" ?>
<student>
<Student>
<!--区分大小写的-->
</Student>
<st1>
<name>
张三
</name>
<score dec="语文成绩">
90
</score>
</st1>
<st2>
<name>李四</name> <!--这是name子节点-->
<score dec="数学成绩">100</score>
</st2>
<st3>
<name> <![CDATA[<王五>]]> </name> <!--<>尖括号是特殊符号系统会默认为节点 如果想要用这个尖括号必须这么写-->
</st3>
<st4/> <!--自闭标签-->
</student>
//节点:<st1>元素节点
//<name>元素节点
// dec 属性节点
//张三,文本节点
//注释内容也是节点
//元素:
//<st1>
//<name Id="1001">张三<name/>
//<st1/>
//从元素中获取属性和文本内容
//通过编程方式创建XML文档 using system.XML
// XmlDocument doc = new XmlDocument();//创建文档对象
//XmlDeclaration dec= doc.CreateXmlDeclaration("1.0","utf-8",null);//创建文档开头描述 declaration 声明的意思
// doc.AppendChild(dec); //将描述信息添加到文档内
// //添加根元素
// XmlElement Skills= doc.CreateElement("Skills");//创建根元素
// doc.AppendChild(Skills);//将根元素添加到文档中
// //skill1
// XmlElement skill1 = doc.CreateElement("skill1");
// Skills.AppendChild (skill1);// skill1添加到Skills元素下
// XmlElement id1 = doc.CreateElement("id1"); //创建skill1下的子元素id1
// skill1.AppendChild(id1); //将子元素添加到skill1下,
// id1.InnerText = "Q";//设置文本内容
// XmlElement name1 = doc.CreateElement("name1");//创建skill1下子元素name1
// skill1.AppendChild (name1);//将子元素添加到skill1下
// name1.InnerText = "眩晕";
// name1.SetAttribute("dec", "眩晕对方2s");//设置属性名称和属性的值
// //skill2
// XmlElement skill2 = doc.CreateElement("skill2");
// Skills.AppendChild(skill2);
// XmlElement id2 = doc.CreateElement("id2");
// skill2.AppendChild(id2);
// id2.InnerText = "Q";
// XmlElement name2 = doc.CreateElement("name2");
// skill2.AppendChild (name2);
// name2.InnerText = "加速";
// name2.SetAttribute("dec", "加速30%");//设置属性名称和属性的值
// //skill3
// XmlElement skill3 = doc.CreateElement("skill3");
// Skills.AppendChild(skill3);
// XmlElement id3= doc.CreateElement("id3");
// skill3.AppendChild(id3);
// id3.InnerText = "Y";
// XmlElement name3 = doc.CreateElement("name2");
// skill3.AppendChild(name3);
// name3.InnerText = "暴走";
// name3.SetAttribute("dec", "暴走30s");
//最后保存下xml文档
// doc.Save("student.xml");
//---------------------------------------------------
//文档的读取
XmlDocument doc = new XmlDocument();//创建文档对象
doc.Load("student.xml");
//XmlElement skills = doc.DocumentElement; //获取文档的根元素
//XmlNodeList list1 = skills.ChildNodes;
//输出的是根元素下所有子元素的文本内容
//foreach (XmlNode item in list1)
//{
// Console.WriteLine(item.InnerText);//输出Q眩晕,Q加速,Y暴走
//}
//Console.WriteLine();
// XmlNodeList list2= list1[0].ChildNodes;
//foreach (XmlNode item in list2)
//{
// Console.WriteLine(item.InnerText);
//}
//通过文档节点路径的方式读取节点
// skills / skill1 / id1 /………………
//获取元素集合
XmlNodeList list = doc.SelectNodes("skills/skill1");
foreach (XmlNode item in list)
{
Console.WriteLine(item.InnerText);
}
//获取单一的元素
XmlNode xn1 = doc.SelectSingleNode("Skills/skill1/name1");//用路径的方式读取元素
Console.WriteLine(xn1.InnerText);//输出的是当前元素的文本内容
//文档内的属性
// 属性的名称对应属性的值
string msg = xn1.Attributes["dec"].Value;//移除后再去读取就会报错
Console.WriteLine(msg);
xn1.Attributes["dec"].Value = "眩晕5s";//修改了文档
xn1.RemoveAll();//删除元素下所有内容
doc.Save("student.xml");
Console.ReadKey();