读取并解析XML文件

1.读取XML文档

此次操作的有一个TXT文档,定义了一个对应的类。

1.1 SkillInfo.txt

<skills>
    <skill>
        <id>2</id>
        <name lang="cn">天下无双</name>
        <damage>123</damage>
    </skill>
    <skill>
        <id>3</id>
        <name lang="cn">永恒零度</name>
        <damage>89</damage>
    </skill>
    <skill>
        <id>4</id>
        <name lang="en">ryfh</name>
        <damage>56</damage>
    </skill>
</skills>

1.2 Skill.CS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _330_XML文档
{
    /// <summary>
    /// 技能类
    /// </summary>
    class Skill
    {
        public int Id;
        public string name { get; set; }
        public string Lang { get; set; }
        public int damage { get; set; }

        public override string ToString()
        {
            return string.Format("Id:{0},name:{1},Lang:{2},damage:{3}", Id, name, Lang, damage);
        }
    }
}

1.3 Program.CS

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace _330_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"));//第二种,传递一个字符串


            //得到根节点
            XmlNode rootNode= xmlDoc.FirstChild;//获取第一个节点

            //得到根节点下的子节点的集合
             XmlNodeList skillNodeList= rootNode.ChildNodes;//获取当前节点下的所有子节点

            foreach(XmlNode skillNode in skillNodeList)
            {
                Skill skill = new Skill();
                XmlNodeList fieldNodeList = skillNode.ChildNodes;//获取skill节点下所有子节点

                foreach(XmlNode fieldNode in fieldNodeList)
                {
                    if(fieldNode.Name=="id")//通过Name属性可以获取一个节点的名字
                    {
                       int id=Int32.Parse( fieldNode.InnerText);//获取节点内部的文本
                        skill.Id = id;
                    }
                    else if (fieldNode.Name =="name")
                    {
                        string name = fieldNode.InnerText;
                        skill.name = name;
                        //Attributes获取到一个属性集合
                        skill.Lang = fieldNode.Attributes[0].Value;
                    }
                    else
                    {
                        skill.damage = Int32.Parse(fieldNode.InnerText);
                    }
                }
                skillList.Add(skill);
            }

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

2. 读取并解析技能信息XML

2.1 xmlSkillInfo.txt

<SkillInfo>
    <SkillList>
        <Skill
            SkillID="20002"  
            SkillEngName="Smash" 
            TriggerType="1" 
            ImageFile="data/gfx/image/gui_icon_skill_000.dds" 
            AvailableRace="7"
        >
			<Name>重击</Name>
		</Skill>
        <Skill
            SkillID="20003" 
            SkillEngName="Hide"
            TriggerType="2" 
            ImageFile="data/gfx/image/gui_icon_skill_001.dds"
            AvailableRace="1" 
        >
			<Name>隐身</Name>
		</Skill>
        <Skill
            SkillID="20004" 
            SkillEngName="Ikari" 
            TriggerType="3" 
            ImageFile="data/gfx/image/gui_icon_skill_002.dds" 
            AvailableRace="1" 
        >
			<Name>怒之翼</Name>
		</Skill>
        <Skill
            SkillID="20005" 
            SkillEngName="Revenge" 
            TriggerType="5" 
            ImageFile="data/gfx/image/gui_icon_skill_003.dds" 
            AvailableRace="2" 
        >
			<Name>光之复仇</Name>
		</Skill>
    </SkillList>
</SkillInfo>

2.2 Skill.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _331_xml解析技能信息
{
    class Skill
    {
        public int Id{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("Id:{0},EngName:{1},TriggerType:{2},","ImageFile:{3},AvailableRace:{4}", Id, EngName, TriggerType, ImageFile, AvailableRace);
        }
    }
}
 
 

2.3 Program.CS

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace _331_xml解析技能信息
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Skill> skillList = new List<Skill>();

            XmlDocument xmlDoc = new XmlDocument();
            //xmlDoc.Load("xmlSkillInfo.txt");
            xmlDoc.LoadXml(File.ReadAllText("xmlSkillInfo.txt"));

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

            XmlNodeList skillNodeList = skillListNode.ChildNodes;

            foreach(XmlNode skillNode in skillListNode)
            {
                Skill skill = new Skill();
                XmlElement ele= skillNode["Name"];
                skill.EngName = ele.InnerText;
                XmlAttributeCollection col= skillNode.Attributes;//获取该节点属性的集合
                /***************
                XmlAttribute IdAttribute = col["SkillID"];
                skill.Id = Int32.Parse(IdAttribute.Value);
                *******************/
                skill.Id = Int32.Parse(col["SkillID"].Value);
                skill.EngName = col["SkillEngName"].Value;
                skill.TriggerType = Int32.Parse(col["TriggerType"].Value);
                skill.AvailableRace = Int32.Parse(col["AvailableRace"].Value);

                skillList.Add(skill);
            }

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



猜你喜欢

转载自blog.csdn.net/a962035/article/details/79768453