C#高级篇-XML相关

1.xml基础
xml指可扩展标记语言

被设计用来和传输和存储数据。XML被设计用来结构化、存储以及传输信息

 

XML语法规则

所有XML元素都必须有关闭标签

XML标签对大小写敏感

XML必须正确的嵌套

XML文档必须有根元素

XML属性值必须加引号

 

XML命名规则

名称可以包含字母、数字以及其他字符

名称不能以数字或者标点符号开始

名称不能以“xml”开始

名称不能包含空格

 

2.xml文档解析

创建一个简单的XML文档

<skills>
  <skill>
    <id>2</id>
    <name lang ="cn">汤姆的神爪</name>
    <damage>233</damage>
  </skill>
  <skill>
    <id>3</id>
    <name lang ="cn">杰瑞的闪烁</name>
    <damage>66</damage>
  </skill>
  <skill>
    <id>4</id>
    <name lang ="en">Call of duty</name>
    <damage>9999</damage>
  </skill>
</skills>

创建一个用于保存Skill的类

//技能类
    class Skill
    {
        public int Id   {   get;set; }
        public string Name { get; set; }
        public string Lang { get; set; }
        public int Damage { get; set; }
        public override string ToString()
        {
            return string.Format("{0},{1},{2},{3}",Id,Name,Lang,Damage);
        }
    }

在主程序中解析xml文件,将解析出来的结果保存到skill类创建出来的对象的集合中。

先创建List泛型为Skill

创建XmlDocument对象来解析xml文档

使用Load方法加载要解析的文档

使用得到的XmlDocument的FirstChild属性获取得到第一个节点

使用ChildNodes得到root节点下面的全部节点

将遍历得到的子节点再进行遍历,通过InnerText属性获取节点内部的文本,来保存到Skill的对象中,

将Skill对象添加到List中

遍历List来显示得到的结果

static void Main(string[] args)
        {
            //创建Skill的集合,用来存储解析得到的技能信息
            List<Skill> skillList = new List<Skill>();

            //XmlDocment专门用来解析xml文档的
            XmlDocument xmlDoc = new XmlDocument();
            
            //选择要加载解析的xml文档的名字
            xmlDoc.Load("skillinf.txt");

            //得到根节点 XmlNode用来表示一个节点
            XmlNode rootNode = xmlDoc.FirstChild;//获取第一个节点
            XmlNodeList skillNodeList = rootNode.ChildNodes;//获取当前结点下面的全部子节点
            
            foreach(XmlNode skillNode in skillNodeList)
            {
                Skill skill = new Skill();
                XmlNodeList filedNodeList = skillNode.ChildNodes;//获取skill节点下面的全部节点

                foreach(XmlNode filedNode in filedNodeList)
                {
                    if (filedNode.Name == "id") {
                        int id = Int32.Parse( filedNode.InnerText);//获取节点内部文本
                        skill.Id = id;
                    }else if(filedNode.Name == "name")
                    {
                        skill.Name = filedNode.InnerText;
                        skill.Lang = filedNode.Attributes[0].Value;
                    }
                    else
                    {
                        skill.Damage = Int32.Parse(filedNode.InnerText);
                    }
                }
                skillList.Add(skill);
            }
            foreach(Skill sk in skillList)
            {
                Console.WriteLine(sk);
            }
            Console.ReadKey();
        }

也可以通过LoadXml方法解析xml文件

xmlDoc.LoadXml(File.ReadAllText("skillinf.txt"));

 

3.xml文档解析技能信息例子

class Skill
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string EngName { get; set; }
        public int TriggerType { get; set; }
        public string ImageFile { get; set; }
        public int AvailableRace { get; set; }
        public override string ToString()
        {
            return string.Format( "{0},{1},{2},{3},{4},{5}"
                ,Id,Name,EngName,TriggerType,ImageFile,AvailableRace);
        }
    }
static void Main(string[] args)
        {
            List<Skill> skillList = new List<Skill>();

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("xml技能信息.txt");

            XmlNode skillInfoNode = xmlDoc.FirstChild;
            XmlNode skillListNode = skillInfoNode.FirstChild;

            XmlNodeList skillNodeList = skillListNode.ChildNodes;
            foreach(XmlNode skillnode in skillNodeList)
            {
                Skill skill = new Skill();
                XmlElement ele = skillnode["Name"];
                skill.Name = ele.InnerText;
                XmlAttributeCollection col = skillnode.Attributes;
                skill.Id = Int32.Parse(col["SkillID"].Value);
                skill.EngName = col["SkillEngName"].Value;
                skill.TriggerType = Int32.Parse(col["TriggerType"].Value);
                skillList.Add(skill);
            }

            foreach(Skill s in skillList)
            {
                Console.WriteLine(s);
            }
            Console.ReadKey();
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值