C#学习高级篇-使用Xml文档

本文档详细介绍了C#高级篇中的XML文档处理,包括入口程序Program.cs的实现,自定义skill类的设计,以及如何读取和解析Skillinfo.txt文件,最后展示运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#学习高级篇-使用Xml文档

入口程序Program.cs``

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;

namespace XML文档
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建技能信息集合,用来存储所有的技能信息
            List<Skill> skillList = new List<Skill>();

            //XmlDocument专门用来解析xml文档
            XmlDocument xmlDoc = new XmlDocument();

            //选择要加载解析的xml文档的名字
            //xmlDoc.Load("Skillinfo.txt");加载文件,传递过来一个文件名
            xmlDoc.LoadXml(File.ReadAllText("Skillinfo.txt"));//传递一个字符串(xml格式的字符串)

            //得到根节点(xmlnode用来代表一个结点)
            XmlNode rootNode = xmlDoc.FirstChild;//获取第一个节点即根节点
            //得到根节点下面的子节点的集合
            XmlNodeList skillNodeList = rootNode.ChildNodes;//获得当前节点下的所有子节点

            foreach (XmlNode skillNode in skillNodeList)
            {
                Skill skill = new Skill();
                //filedNode表示字段节点集合
                XmlNodeList filedNodeList = skillNode.ChildNodes;//获取skill结点下面所有的结点
                foreach (XmlNode filedNode in filedNodeList)
                {
                    if (filedNode.Name == "id")//通过Name属性可以获取一个结点的名字
                    {
                        int id = Int32.Parse(filedNode.InnerText);//获取节点内部的文本
                        skill.Id = id;
                    }
                    else if (filedNode.Name == "name")
                    {
                        string name = filedNode.InnerText;
                        skill.Name = name;
                        skill.Lang = filedNode.Attributes[0].Value; //Attributes[0]可以得到某个结点的属性,比如
                    }
                    else//当这个结点是damage的时候
                    {
                        skill.Damage = int.Parse(filedNode.InnerText);
                    }
                }
                skillList.Add(skill);
            }

            foreach (var skill in skillList)
            {
                Console.WriteLine(skill);//直接输出Skill类的对象skill的话,会输出类名,所以需要在Skill类里面输出ToString方法
            }
            Console.ReadKey();
        }
    }
}

该工程下创建的skill类

using System;
using System.Collections.Generic;
using System.Text;

namespace XML文档
{
    //技能类
    class Skill
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Lang { get; set; }
        public int Damage { get; set; }

        //A/t+Insert->Formatting Members->全选所有属性
        public override string ToString()
        {
            return $"{nameof(Id)}: {Id}, {nameof(Name)}: {Name}, {nameof(Lang)}: {Lang}, {nameof(Damage)}: {Damage}";
        }
    }
}

``



这是Skillinfo.txt文件

<Skills>
  <Skill>
    <id>1</id>
    <name lang="cn">独孤求败</name>
    <damage>100</damage>
  </Skill> 
  <Skill>
    <id>2</id>
    <name lang="cn">独孤求败2</name>
    <damage>200</damage>
  </Skill> 
  <Skill>
    <id>3</id>
    <name lang="en">独孤求败3</name>
    <damage>300</damage>
  </Skill>
  
  
  
  
</Skills>

运行结果

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值