c#简单使用xml文件

首先添加txt文件:

 

设置为xml打开模式:

 

添加根标签、添加单个标签和属性:

<Skills>//根标签
  <skill>//单个标签
    <id>1</id>//属性
    <name lang ="cn">天降正义</name>//lang表示language,cn表示中文,en表示英文
    <power>80</power>
  </skill>
  <skill>
    <id>2</id>
    <name lang ="cn">神来之笔</name>
    <power>75</power>
  </skill>
  <skill>
    <id>3</id>
    <name lang="en">doubleHit</name>
    <power>77</power>
  </skill>
</Skills>

 

使用xml文件

方法1

利用XmlDocment解析xml文档

创建文档内相关信息的类

选择要加载解析的xml文件名

得到根节点(根标签)

得到根节点下的子节点(单个标签)的集合

遍历子节点的集合并将子节点下的结点(属性)的值InnerText赋予相关信息类的集合,其中也有特性,如上面定义的lang,可以用结点下的Attribute[index].Value得到。

static void Main(string[] args)
{
    List<Skill> SkillList = new List<Skill>();
    //使用XmlDocument解析文档
    XmlDocument xmlSkillInfo = new XmlDocument();
    //两种方法加载文档
    xmlSkillInfo.Load(@".\..\..\SkillInfo.txt");//直接使用文件名加载
    //xmlSkillInfo.LoadXml(File.ReadAllText(@".\..\..\SkillInfo.txt"));//使用文件内的数据加载

    //得到根节点(根标签)//Skills
    XmlNode rootNode = xmlSkillInfo.FirstChild;//因为当前xml下只有一个根节点,所以用FirstChild获取即可

    //得到根节点下的子节点(单个标签)//skill
    XmlNodeList SkillNodeList = rootNode.ChildNodes;

    //遍历所有的子节点(skill)
    foreach (XmlNode skillNode in SkillNodeList)
    {
        Skill skill = new Skill();
        XmlNodeList skillList = skillNode.ChildNodes;
        //得到子节点(skill)下的各个属性(id、name[lang]和power)并将数据存入SkillList
        foreach (XmlNode fieldNode in skillList)
        {
            switch (fieldNode.Name)//通过Name属性可以获取结点的名字
            {
                case "id":
                    skill.id = Int32.Parse(fieldNode.InnerText);
                    break;
                case "name":
                    skill.name = fieldNode.InnerText;
                    skill.lang = fieldNode.Attributes[0].Value;
                    break;
                case "power":
                    skill.power = Int32.Parse(fieldNode.InnerText);
                    break;
                default:
                    break;
            }
        }
        SkillList.Add(skill);
    }

    foreach (Skill skill in SkillList)
    {
        Console.WriteLine(skill.ToString());//需要重写ToString方法
    }

    Console.ReadKey();
}

结果如下:

 

 

方法2:

通过XmlElement与XmlAttributeCollection获取节点名和结点下的属性,XML文件如下:

<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>

主程序执行代码如下:

static void Main(string[] args)
{
    List<Skill> skillList = new List<Skill>();
    XmlDocument XmlSkillInfo = new XmlDocument();
    XmlSkillInfo.Load(@".\..\..\xml技能信息.txt");

    XmlNode SkillListNode = XmlSkillInfo.FirstChild.FirstChild;//SkillList

    XmlNodeList SkillNodeList = SkillListNode.ChildNodes;//SkillList

    foreach (XmlNode skillNode in SkillNodeList)//Skill and Name
    {
        Skill skill = new Skill();
        XmlElement ele = skillNode["Name"];//获取名为"Name"的元素
        skill.Name = ele.InnerText;//注意是InnerText不是Value
        XmlAttributeCollection xmlAttrCol = skillNode.Attributes;//获取此节点下的所有属性,并以集合的形式返回
        skill.Id = Int32.Parse(xmlAttrCol["SkillID"].Value);
        skill.EngName = xmlAttrCol["SkillEngName"].Value;
        skill.TriggerYpye = Int32.Parse(xmlAttrCol["TriggerType"].Value);
        skill.ImageFile = xmlAttrCol["ImageFile"].Value;
        skill.AvailableRace = Int32.Parse(xmlAttrCol["AvailableRace"].Value);

        skillList.Add(skill);
    }

    foreach (Skill temp in skillList)
    {
        Console.WriteLine(temp.ToString());
    }

    Console.ReadKey();
}

结果:

posted @ 2020-08-03 17:15  穷在闹市  阅读(604)  评论(0)    收藏  举报