【XML|C#】使用XmlNode加载已有的xml文件(关于封装自定义类的数组和字典)
xmlNode使用
·
目录
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()
{
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)