C#-XmlDataDocument-xml文件处理

本文详细介绍了使用C#进行XML文件的读取和写入操作,包括如何解析XML数据、提取特定信息,以及如何创建新的XML文件并填充数据。通过具体示例展示了学生信息的读取和写入过程。

1 读取xml文件内容

//读取xml文件内容
            XmlDataDocument doc = new XmlDataDocument();
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.IgnoreComments = true;//忽略文件中的注释
            string filename = @"students.xml";
            XmlReader reader = XmlReader.Create(filename, settings);
            doc.Load(reader);

1.2 测试用例

<grades>
    <grade>
       <id>2019001</id>
       <name>张三</name>
       <course>机器学习</course>
       <score>85</score>
    </grade>
    <grade>
       <id>2019002</id>
       <name>李四</name>
       <course>操作系统</course>
       <score>90</score>
    </grade>
<grade>
       <id>2019003</id>
       <name>王五</name>
       <course>数据结构</course>
       <score>95</score>
    </grade>
</grades>

1.3 分别读取根节点下的子节点内容

//得到单根节点grades内容
            XmlNode xn = doc.SelectSingleNode("grades");

            //得到根节点下的所有子节点
            XmlNodeList nodeList = xn.ChildNodes;

            //读取每一个子节点的内容
            int cnt = nodeList.Count;//子节点的个数
            Students[] students = new Students[cnt];//对象数组
            int i = 0;//对象数组下标
            //处理每个student信息
            foreach (XmlNode xnl in nodeList)
            {
                //获得某个学生下的所有子节点
                XmlNodeList xnls = xnl.ChildNodes;
                String id = xnls.Item(0).InnerText;
                String name = xnls.Item(1).InnerText;
                String project = xnls.Item(2).InnerText;
                int grade = Convert.ToInt32(xnls.Item(3).InnerText);
                //录入数据到对象中
                Students student = new Students(id, name, project, grade);
                //加入到对象数组中
                students[i++] = student;
                Console.WriteLine("获得学号为 {0} 的信息", id);
            }
            Console.WriteLine("获取学生信息完毕。");

1.4 输出结果

2019003,王五,数据结构,95
2019002,李四,操作系统,90
2019001,张三,机器学习,85

2 写入xml文件

//写入xml文件内容
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;//要求缩进
            filename = @"test.xml";
            XmlWriter writer = XmlWriter.Create(filename,settings);

2.1 测试用例

201833,王二,操作系统,70
201834,张三,操作系统,90
201834,张三,嵌入式系统,20 

2.1 写入xml文件子节点内容和属性

//写入文档声明
            writer.WriteStartDocument();
            //写入新元素(根节点students)
            writer.WriteStartElement("students");
            foreach(Students stu in students)
            {
                //写入分支元素(每个student的信息)
                writer.WriteStartElement("student");

                writer.WriteStartElement("学号");
                writer.WriteString(stu.studentId);
                writer.WriteEndElement();

                writer.WriteStartElement("姓名");
                writer.WriteString(stu.studentName);
                writer.WriteEndElement();

                for(int i = 0; i < stu.projectName.Count; i++)
                {
                    writer.WriteStartElement("课程");
                    writer.WriteAttributeString("课程名", stu.projectName[i]);
                    writer.WriteString(stu.grades[i].ToString());
                    writer.WriteEndElement();
                }

                writer.WriteEndElement();
            }
            writer.WriteEndElement();
            writer.WriteEndDocument();
            writer.Flush();//刷新
            writer.Close();

3.1 结果

<?xml version="1.0" encoding="utf-8"?>
<students>
  <student>
    <学号>201833</学号>
    <姓名>王二</姓名>
    <课程 课程名="操作系统">70</课程>
  </student>
  <student>
    <学号>201834</学号>
    <姓名>张三</姓名>
    <课程 课程名="操作系统">90</课程>
    <课程 课程名="嵌入式系统">20</课程>
  </student>
</students>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值