Unity 基础 之 xml 使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据

Unity 基础 之 xml  使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据

Unity 基础 之 xml 使用 Office Excel 轻松编辑保存 xml 数据

目录


一、简单介绍

Unity中的一些基础知识点。便于后期开发使用。

本节介绍,如何使用 Office Excel 轻松编辑 xml 数据,并保存使用。

二、实现原理

1、一个xml 属性模板;

2、Office Excel 读取 xml 属性模板的信息;

3、Office Excel 添加数据,另存为 xml 数据,同时保存一份excle,便于后期修改维护;

4、导入 Unity 中,对应读取即可;

三、注意事项

1、xml 属性模板中一定要对应两条属性,一条可能Office Excel 识别不出为 xml;

2、注意另存为 xml 数据,而不是 xml 电子表格(xml 电子表格会带很多多余信息在xml中)

四、效果预览

www.zeeklog.com  - Unity 基础 之 xml  使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据
www.zeeklog.com  - Unity 基础 之 xml  使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据

五、实现步骤

1、可以新建一个文本txt,编辑需要的属性信息,保存,,然后修改后缀为 xml

(xml 属性模板中一定要对应两条属性,一条可能Office Excel 识别不出为 xml)

www.zeeklog.com  - Unity 基础 之 xml  使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据
www.zeeklog.com  - Unity 基础 之 xml  使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据

2、打开 Excel,把编辑好的xml 属性模板拖入 Excel,点击确定

www.zeeklog.com  - Unity 基础 之 xml  使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据
www.zeeklog.com  - Unity 基础 之 xml  使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据

3、编辑属性

www.zeeklog.com  - Unity 基础 之 xml  使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据

4、然后另存为 xml 数据

(注意另存为 xml 数据,而不是 xml 电子表格(xml 电子表格会带很多多余信息在xml中))

www.zeeklog.com  - Unity 基础 之 xml  使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据
www.zeeklog.com  - Unity 基础 之 xml  使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据

5、把保存的 xml 数据导入 Unity 中的 Resources 文件夹

www.zeeklog.com  - Unity 基础 之 xml  使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据

6、编写脚本,进行读取xml 数据,把脚本挂载到场景中

www.zeeklog.com  - Unity 基础 之 xml  使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据

7、运行,解析结果

www.zeeklog.com  - Unity 基础 之 xml  使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据

六、关键代码

1、xml 属性模板(XmlTemplate.xml)

<?xml version="1.0" encoding="UTF-8"?>
<root>
<item ID="">
<heroname></heroname>
<age></age>
<sex></sex>
<kungfu></kungfu>
</item>
<item ID="">
<heroname></heroname>
<age></age>
<sex></sex>
<kungfu></kungfu>
</item>
</root>

2、XmlReadAndParse.cs

using System;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using UnityEngine;

public class XmlReadAndParse : MonoBehaviour
{

    List<Hero> heroList = null;
    // Start is called before the first frame update
    void Start()
    {
        heroList = new List<Hero>();

        TextAsset xml = ReadXML("HerosData");
        if (ParseXML(xml) == true) {

            Debug.Log("heroList.Count : " + heroList.Count);
            foreach (Hero item in heroList)
            {

                Debug.LogFormat("{0},{1},{2},{3},{4}",item.ID,item.Name,item.Age,item.Sex,item.Kungfu);

            }
        }
    }

    private TextAsset ReadXML(string path) {
        return Resources.Load<TextAsset>(path);
    }

    /// <summary>
    /// 对应 xml 属性解析
    /// </summary>
    /// <param name="textAsset">文件内容</param>
    /// <returns>true 成功解析</returns>
    private bool ParseXML(TextAsset textAsset)
    {
        
        if (!textAsset)
        {
            Debug.LogError("XML  数据不能为空");
            return false;
        }
        else
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(textAsset.text);

            XmlNodeList nodLst = doc.SelectSingleNode("root").ChildNodes;

            for (int i = 0; i < nodLst.Count; i++)
            {
                XmlElement ele = nodLst[i] as XmlElement;

                if (ele.GetAttributeNode("ID") == null)
                {
                    continue;
                }

                Hero hero = new Hero();

                hero.ID = Convert.ToInt32(ele.GetAttributeNode("ID").InnerText);
                foreach (XmlElement e in nodLst[i].ChildNodes)
                {
                    switch (e.Name)
                    {
                        case "heroname":
                            hero.Name =e.InnerText;
                            break;
                        case "age":
                            hero.Age = e.InnerText;
                            break;
                        case "sex":
                            hero.Sex = e.InnerText;
                            break;
                        case "kungfu":
                            hero.Kungfu = e.InnerText;
                            break;
                    }
                }

                heroList.Add(hero);

            }

        }
        return true;

    }
}

public class Hero {
    

    public int ID { get; set; }
    public string Name { get; set; }
    public string Age { get; set; }
    public string Sex { get; set; }
    public string Kungfu { get; set; }

    public Hero() { }
    public Hero(int iD, string name, string age, string sex, string kungfu)
    {
        ID = iD;
        Name = name;
        Age = age;
        Sex = sex;
        Kungfu = kungfu;
    }

}