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中)
四、效果预览
五、实现步骤
1、可以新建一个文本txt,编辑需要的属性信息,保存,,然后修改后缀为 xml
(xml 属性模板中一定要对应两条属性,一条可能Office Excel 识别不出为 xml)
2、打开 Excel,把编辑好的xml 属性模板拖入 Excel,点击确定
3、编辑属性
4、然后另存为 xml 数据
(注意另存为 xml 数据,而不是 xml 电子表格(xml 电子表格会带很多多余信息在xml中))
5、把保存的 xml 数据导入 Unity 中的 Resources 文件夹
6、编写脚本,进行读取xml 数据,把脚本挂载到场景中
7、运行,解析结果
六、关键代码
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;
}
}