目录

xml文件:

 加载代码+自定义类:

加载原理(截图版): 

测试结果:

xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<PlanJiHua>
	<!--自己定一个xml代表 类对象数据的规则
	我们的元素节点名 就用我们的变量名命名
	-->
	<version>1</version>

	<daji>
		<daJiWaitForTime>5</daJiWaitForTime>
		<stateRangeInt>0</stateRangeInt>
	</daji>
	<!--当出现没有变量名的数据时 我们就用变量类型名命名-->
	
	<guoChangList>
		<GuoChang GuoChangtForTime="1" stateRangeInt="0" isOwnHaveInt="0"/>
		<GuoChang GuoChangtForTime="2" stateRangeInt="1" isOwnHaveInt="1"/>
		<GuoChang GuoChangtForTime="3" stateRangeInt="2" isOwnHaveInt="1"/>
		<GuoChang GuoChangtForTime="4" stateRangeInt="0" isOwnHaveInt="0"/>
	</guoChangList>


	<xunHuanDic>
		<int>1</int>
		<XunHuan XunHuantForTime="1" stateRangeInt="3"/>
		<int>2</int>
		<XunHuan XunHuantForTime="2" stateRangeInt="3"/>
		<int>3</int>
		<XunHuan XunHuantForTime="3" stateRangeInt="1"/>
		<int>4</int>
		<XunHuan XunHuantForTime="3" stateRangeInt="2"/>
		<!-- 另一种写法 但是建议大家都统一
		<int>4</int>
		<Item>
			<id>4</id>
			<num>1</num>
		</Item>
		-->
	</xunHuanDic>
</PlanJiHua>

 加载代码+自定义类:

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

public enum StateRange
{
    StatePic,
    VideoPlaying,
    SceneLoad,
}

public class Daji
{
    public float daJiWaitForTime = 5.0f;
    public int stateRangeInt = 0;
    public Daji()
    {

    }

    public Daji(float daJiWaitForTime,StateRange stateRange)
    {
        this.daJiWaitForTime = daJiWaitForTime;
        switch (stateRange)
        {
            case StateRange.StatePic:
                this.stateRangeInt = 0;
                break;
            case StateRange.VideoPlaying:
                this.stateRangeInt = 1;
                break;
            case StateRange.SceneLoad:
                this.stateRangeInt = 2;
                break;
        }
    }
}

public class GuoChang
{
    public float GuoChangtForTime = 5.0f;
    public int stateRangeInt = 0;
    public int isOwnHaveInt = 0;

    public GuoChang()
    {
    }

    public GuoChang(float GuoChangtForTime, StateRange stateRange, bool isOwnHave)
    {
        this.GuoChangtForTime = GuoChangtForTime;
        switch (stateRange)
        {
            case StateRange.StatePic:
                this.stateRangeInt = 0;
                break;
            case StateRange.VideoPlaying:
                this.stateRangeInt = 1;
                break;
            case StateRange.SceneLoad:
                this.stateRangeInt = 2;
                break;
        }
        switch (isOwnHave)
        {
            case false:
                this.isOwnHaveInt = 0;
                break;
            case true:
                this.isOwnHaveInt = 1;
                break;
        }
    }
}

public class XunHuan
{
    public float XunHuantForTime = 5.0f;
    public int stateRangeInt = 0;

    public XunHuan()
    {
    }

    public XunHuan(float XunHuantForTime, StateRange stateRange)
    {
        this.XunHuantForTime = XunHuantForTime;
        switch (stateRange)
        {
            case StateRange.StatePic:
                this.stateRangeInt = 0;
                break;
            case StateRange.VideoPlaying:
                this.stateRangeInt = 1;
                break;
            case StateRange.SceneLoad:
                this.stateRangeInt = 2;
                break;
        }
      
    }
}

public class PlanJiHua 
{
    public int version;
    public Daji daji;

    public List<GuoChang> guoChangList;
    public Dictionary<int, XunHuan> xunHuanDic;
     public void LoadData(string fileName)
    {
        //加载XML文件信息
        XmlDocument xml = new XmlDocument();
        //加载
        xml.Load(Application.streamingAssetsPath + "/" + fileName + ".xml");

        

        //从文件中加载出具体的数据
        //加载根节点 才能加载后面的内容
        XmlNode PlanJiHua = xml.SelectSingleNode("PlanJiHua");
        //通过根节点 去加载具体的信息

        this.version = int.Parse(PlanJiHua.SelectSingleNode("version").InnerText);

        XmlNode dajiNode = PlanJiHua.SelectSingleNode("daji");
        this.daji = new Daji();
        this.daji.daJiWaitForTime = float.Parse(dajiNode.SelectSingleNode("daJiWaitForTime").InnerText);
        this.daji.stateRangeInt = int.Parse(dajiNode.SelectSingleNode("stateRangeInt").InnerText);


        XmlNode guoChangListNode = PlanJiHua.SelectSingleNode("guoChangList");
        XmlNodeList GuoChangs = guoChangListNode.SelectNodes("GuoChang");
        this.guoChangList = new List<GuoChang>();
        foreach (XmlNode GuoChang in GuoChangs)
        {
            GuoChang GuoChang2 = new GuoChang();
            GuoChang2.GuoChangtForTime = float.Parse(GuoChang.Attributes["GuoChangtForTime"].Value);
            GuoChang2.stateRangeInt = int.Parse(GuoChang.Attributes["stateRangeInt"].Value);
            GuoChang2.isOwnHaveInt = int.Parse(GuoChang.Attributes["isOwnHaveInt"].Value);
           
            this.guoChangList.Add(GuoChang2);
        }

        XmlNode xunHuanListNode = PlanJiHua.SelectSingleNode("xunHuanDic");
        XmlNodeList keyInt = xunHuanListNode.SelectNodes("int");
        XmlNodeList valuexunHuan = xunHuanListNode.SelectNodes("XunHuan");

        this.xunHuanDic = new Dictionary<int, XunHuan>();
        for (int i = 0; i < keyInt.Count; i++)
        {
            int key = int.Parse(keyInt[i].InnerText);
            XunHuan value = new XunHuan();
            value.XunHuantForTime = float.Parse(valuexunHuan[i].Attributes["XunHuantForTime"].Value);
            value.stateRangeInt = int.Parse(valuexunHuan[i].Attributes["stateRangeInt"].Value);
            this.xunHuanDic.Add(key, value);
        }

    }
}

加载原理(截图版): 

 

 

 

 

测试结果:

XmlNodeLoad:

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

public class XmlNodeLoad : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        PlanJiHua planJiHua = new PlanJiHua();
        planJiHua.LoadData("PlanJiHua");

        Debug.Log("planJiHua.version---"+planJiHua.version);
        Debug.Log("planJiHua.guoChangList[0].stateRangeInt---" + planJiHua.guoChangList[0].stateRangeInt);
        Debug.Log("planJiHua.guoChangList[1].isOwnHaveInt---" + planJiHua.guoChangList[1].isOwnHaveInt);
        Debug.Log("planJiHua.xunHuanDic[1].stateRangeInt----"+planJiHua.xunHuanDic[1].stateRangeInt);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

Logo

欢迎加入我们的广州开发者社区,与优秀的开发者共同成长!

更多推荐