using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//引用命名空间
using System.Xml;
namespace Read_write_XML
{
public class RWXml
{
//生成一个xml文档
public void WriteXml()
{
//随机数
Random rd = new Random();
//首先,创建xml文档
/*
* 1.实例化一个xml Document类
其中一共有三个参数,都是string类型的,第一个是版本
参考<?xml version="1.0" encoding="utf-8" ?>
第一个参数为"1.0"
第二个参数为编码方式"utf-8"
第三个参数为,必须是yes或者no
一定要写返回类型,返回类型是XmlDeclaration类型的*/
XmlDocument xDoc = new XmlDocument();
//创建一个声明xml文档所需要的语法的变量
XmlDeclaration declaration = xDoc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
//下面AppendChild方法是用来将指定的节点添加到该节点的子节点列表的末尾,在xml文件第一行后面就是末尾
xDoc.AppendChild(declaration);
//一个xml文档,必须要有一个根元素
//创建根节点students
//XmlElement相当于XmlNode
XmlElement elem = xDoc.CreateElement("students");
//把根节点添加到xml文档中去
xDoc.AppendChild(elem);
//目前为止只有子节点,但是没有根节点
//下面是设置student个数
for (int i = 1; i <= 10; i++)
{
//下面开始添加子节点,放在根节点的下面,提示,xDoc是xml文档
XmlElement elem1 = xDoc.CreateElement("student");//把子节点放到根节点elem的下面去
//将第一级的子节点,放置到根节点的下面去
elem.AppendChild(elem1);
//下面就是添加属性,属性就是student里面的东西了,例如名字性别等等
elem1.SetAttribute("姓名", "张三");
elem1.SetAttribute("学号", rd.Next(10000,99999).ToString());
//添加第三级的节点
//添加子节点的子节点
XmlElement elem1_1 = xDoc.CreateElement("语文成绩");
elem1.AppendChild(elem1_1);
//增加节点中的数据
elem1_1.InnerText = rd.Next(60, 100).ToString();
XmlElement elem1_2 = xDoc.CreateElement("数学成绩");
elem1.AppendChild(elem1_2);
elem1_2.InnerText = rd.Next(60, 100).ToString();
XmlElement elem1_3 = xDoc.CreateElement("外语成绩");
elem1.AppendChild(elem1_3);
elem1_3.InnerText = rd.Next(60, 100).ToString();
}
xDoc.Save("students.xml");//将xml文档保存在指定的文件
}
//下面是读取Xml文档的
public void ReadXml()
{
//首先,创建xml文档
/*
* 1.实例化一个xml Document对象*/
XmlDocument xDoc = new XmlDocument();
//2.加载xml文件
xDoc.Load("students.xml");
//第一步要获取根节点students
XmlNode node = xDoc.SelectSingleNode("students");
XmlNodeList nodeList = node.ChildNodes;
foreach(XmlNode xn in nodeList)
{
//string name = xn.Name;//这里仅仅是结点的名字,但不是节点的属性,我们想看到节点的属性
//类型显示转换
XmlElement xmle = (XmlElement)xn;
string name = xmle.GetAttribute("姓名");
string no = xmle.GetAttribute("学号");
//先输出姓名和学号信息
Console.WriteLine(name + ":" + no);
XmlNodeList childList = xn.ChildNodes;
foreach(XmlNode n in childList)//这里循环的是第三级节点,也就是成绩的节点
{
//类型转换
XmlElement xe = (XmlElement)n;
string className = xe.Name;
string score = xe.InnerText;//InnerText是获取或者设置值
//再输出成绩信息
Console.WriteLine(className + ":" + score);
//如果想修改可以进行以下的操作
//使用if语句对某一个进行更改
if (no== "63729")
xe.InnerText = "100";
}
}
//生成或者修改xml文档,末尾一定要写save方法
xDoc.Save("students.xml");
Console.ReadKey();
}
}
}
using System;
using System.Xml;
namespace Read_write_XML
{
class Program
{
static void Main(string[] args)
{
RWXml xml = new RWXml();
xml.ReadXml();
}
}
}