读取文件
要储存的对象为
public class Item
{
public int id;
public int num;
}
public class PlayerInfo
{
public string name;
public int atk;
public float moveSpeed;
public Item weapon;
public List<int> listInt;
public List<Item> itemList;
public Dictionary<int, Item> itemDic;
}
1、创建xml文件对象
XmlDocument xml = new XmlDocument();
2、通过xml文件路径加载
xml.Load(Application.streamingAssetsPath + "/TestXML.xml");
3、读取元素
以下面这个xml文件举例
<?xml version="1.0" encoding="UTF-8"?>
<PlayInfo>
<name>Holens</name>
<atk>10</atk>
<moveSpeed>10</moveSpeed>
<weapon>
<Item id="3" num="1" />
</weapon>
<listInt>
<int>1</int>
<int>2</int>
</listInt>
<itemList>
<Item id="1" num="10" />
<Item id="2" num="10" />
</itemList>
<itemDic>
<Int>1</Int>
<Item id="1" num="1" />
<Int>2</Int>
<Item id="2" num="1" />
<Int>3</Int>
<Item id="3" num="1" />
</itemDic>
</PlayInfo>
用XmlNode类创建一个对象,用xml对象中的SelectSingleNode方法获取单个元素
//获取根节点
XmlNode playerInfo = xml.SelectSingleNode("PlayerInfo");
//通过根节点获取子节点,类似树形结构
XmlNode name = playerInfo.SelectSingleNode("name");
XmlNode atk = playerInfo.SelectSingleNode("atk");
XmlNode moveSpeed = playerInfo.SelectSingleNode("moveSpeed");
//注意获取的都是字符串,要转化为相应的数据类型
this.name = name.InnerText;
this.atk = int.Parse(atk.InnerText);
this.moveSpeed = float.Parse(moveSpeed.InnerText);
4、获取属性
得到相应的节点后,使用Attributes["属性名"].Value得到相应数据
//得到子节点weapon
XmlNode weapon = playerInfo.SelectSingleNode("weapon");
//得到weapon下存储的Item
XmlNode weaponItem = weapon.SelectSingleNode("Item");
//注意PlayerInfo对象内的weapon没有初始化,这里要先创建一个对象
this.weapon = new Item();
//获取属性
this.weapon.id = int.Parse(weaponItem.Attributes["id"].Value);
this.weapon.num = int.Parse(weaponItem.Attributes["num"].Value);
5、得到多个子节点
利用XmlNodeList配合xml中的SelectNodes方法可以储存多个子节点。得到的XmlNodeList对象进行for循环遍历得到其中的内容
//先得到根节点
XmlNode listInt = playerInfo.SelectSingleNode("listInt");
//获取多个节点
XmlNodeList intL = listInt.SelectNodes("int");
//注意PlayerInfo对象内的listInt没有初始化,这里要先创建一个对象
this.listInt = new List<int>();
for (int i = 0; i < intL.Count; i++)
{
this.listInt.Add(int.Parse(intL[i].InnerText));
}
6、节点List内存储多个自定义类
XmlNode itemList = playerInfo.SelectSingleNode("itemList");
XmlNodeList playerItem = itemList.SelectNodes("Item");
this.itemList = new List<Item>();
for (int i = 0; i < playerItem.Count; i++)
{
//先初始化一个Item对象,用于存放得到的数据
Item temItem = new Item();
//存入数据
temItem.id = int.Parse(playerItem[i].Attributes["id"].Value);
temItem.num = int.Parse(playerItem[i].Attributes["num"].Value);
//将这个Item添加到List中
this.itemList.Add(temItem);
}