Unity解析XML文件

因为有些老项目还是用了XML来存取数据和存放相应的游戏配置。所以XML的读取还是需要重温一下。

XML文件相比于JSON而言,稍微复杂一点。而且现在基本上都倾向于用JSON,更加的轻量级。

Unity内置的API是支持解析XML的。

我们通过下面的一个例子来重温一下,Unity环境下XML的读取。

下面这个是我们要读取的XML的文件,该文件我们放在了UnityAsset目录下的Resources文件夹中,这样做是为了方便后期的读取。当然了,这个位置可以自定义在Unity目录下的任何文件夹下,只要我们读取的到。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
	<system_unlock id="1" group="" type="1" showExt="false" openType="1" />
	<system_unlock id="2" group="" type="1" showExt="false" openType="1" />
</root>

上面这个是一个比较常规的XML例子,是我们游戏的一个配置表,用XML写的。

然后我们就写代码来读取这份文件。

首先我们如果想要正常存储这个XML中的每一条Node的话就需要创建一个类。

public class SystemUnlock
{
    public int m_id;
    public string m_group;
    public int m_type;
    public bool m_showExt;
    public int m_openType;
    public SystemUnlock(string id,string group,string type,string showExt,string openType)
    {
        m_id = int.Parse(id);
        m_group = group;
        m_type = int.Parse(type);
        m_showExt = bool.Parse(showExt);
        m_openType = int.Parse(openType);
    }

    public SystemUnlock()
    {

    }
}

我们对类的定义如上所示,通过一个构造方法,在构造方法里面转换类型。要知道XML读取出来的node全部都是string类型。转换成相应的类型,需要我们后期自己处理。在这里我们直接写到了构造方法中。

public class LoadXML : MonoBehaviour
{
    private List<SystemUnlock> m_systems = new List<SystemUnlock>();
    private void Start()
    {
        LoadFile();
    }

    void LoadFile()
    {
        XmlDocument xmlDoc = new XmlDocument();

        TextAsset xmlfile = Resources.Load<TextAsset>("1");
        if (xmlfile.text != null)
        {
            Debug.Log(xmlfile.text);
            xmlDoc.LoadXml(xmlfile.text);
            XmlNodeList infoNodeList = xmlDoc.SelectSingleNode("root").ChildNodes;
            for (int i = 0; i < infoNodeList.Count; i++)
            {
                SystemUnlock sys = new SystemUnlock(infoNodeList[i].Attributes["id"].Value, infoNodeList[i].Attributes["group"].Value, 
                    infoNodeList[i].Attributes["type"].Value, infoNodeList[i].Attributes["showExt"].Value, infoNodeList[i].Attributes["openType"].Value);
                m_systems.Add(sys);
                Debug.Log(sys.m_id);
            }
        }
    }
}

上面的方法,是一个读取XML并存储的一套业务逻辑。

在这个逻辑中,我们通过Resources读取XML文件,这里我们的XML文件命名为1.txt,在Resources里面读取是不需要加后缀的。所以这里读取成立。

读取完毕以后直接通过访问他们的子节点,将所有的变量读取出来并存储到我们临时创建的集合中。

到此,XML解析结束。

稍后我会将原工程上传到Git上。这样大家可以直接阅读源码。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值