XML文件读取
总结
1.读取XML文件
XmlDocument xml = new XmlDocument();
读取文本方式1-xml.LoadXml(传入xml文本字符串)
读取文本方式2-xml.Load(传入路径)
2.读取元素和属性
获取单个节点 : XmlNode node = xml.SelectSingleNode(节点名)
获取多个节点 : XmlNodeList nodeList = xml.SelectNodes(节点名)
获取节点元素内容:node.InnerText
获取节点元素属性:
1.item.Attributes["属性名"].Value
2.item.Attributes.GetNamedItem("属性名").Value
通过迭代器遍历或者循环遍历XmlNodeList对象 可以获取到各单个元素节点
代码
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using UnityEngine;
public class LoadXml : MonoBehaviour
{
void Start()
{
//1.使用Resources提取出的资源,得到xml的text并进行加载
XmlDocument xml = new XmlDocument();
TextAsset asset = Resources.Load<TextAsset>("TestXml");
//print(asset.text);
//loadxml 直接翻译字符串为xml
xml.LoadXml(asset.text);
//2.直接通过xml的路径加载
//xml.Load(Application.streamingAssetsPath + "/TestXml.xml");
//节点信息类
//XmlNode 单个节点信息
//XmlNodeList 多个节点信息类
XmlNode root = xml.SelectSingleNode("Root");
//通过根节点找子节点
XmlNode nodeName = root.SelectSingleNode("name");
//得到个子节点通过 InnerText读取里面的内容
print(nodeName.InnerText);
XmlNode nodeAge = root.SelectSingleNode("age");
print(nodeAge.InnerText);
XmlNode nodeItem = root.SelectSingleNode("Item");
//得到带属性的节点内容
//第一种
print(nodeItem.Attributes["id"].Value);
print(nodeItem.Attributes["num"].Value);
//第二种(了解)
print(nodeItem.Attributes.GetNamedItem("id").Value);
//获取一个节点下 所有同名节点的方式
XmlNodeList friendList = root.SelectNodes("Friend");
//遍历方式1:迭代器遍历
foreach (XmlNode item in friendList)
{
print(item.SelectSingleNode("id").Value);
print(item.SelectSingleNode("name").Value);
}
//遍历方式2:for循环
for (int i = 0; i < friendList.Count; i++)
{
print(friendList[i].SelectSingleNode("id").Value);
print(friendList[i].SelectSingleNode("name").Value);
}
}
}
在playerInfo类中写一个加载xml数据的LoadData()函数
用于解析一个xml文件并将内容赋予到一个新的playerInfo上去
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using UnityEngine;
public class Item
{
public int id;
public int num;
}
public class playerInfo
{
public string name;
public int atk;
public int def;
public float moveSpeed;
public float roundSpeed;
public Item weapon;
public List<int> listInt;
public List<Item> itemList;
public Dictionary<int, Item> itemDic;
public void LoadData(string fileName)
{
//加载XML文件信息
XmlDocument xml = new XmlDocument();
//加载
xml.Load(Application.streamingAssetsPath + "/" + fileName + ".xml");
//从文件中加载出具体的数据
//加载根节点 才能加载后面的内容
XmlNode playerInfo = xml.SelectSingleNode("PlayerInfo");
//通过根节点 去加载具体的信息
//不是属性的化用 InnerText 属性的化用Attributes
this.name = playerInfo.SelectSingleNode("name").InnerText;
this.atk = int.Parse(playerInfo.SelectSingleNode("atk").InnerText);
this.def = int.Parse(playerInfo.SelectSingleNode("def").InnerText);
this.moveSpeed = float.Parse(playerInfo.SelectSingleNode("moveSpeed").InnerText);
this.roundSpeed = float.Parse(playerInfo.SelectSingleNode("roundSpeed").InnerText);
XmlNode weaponNode = playerInfo.SelectSingleNode("weapon");
//实例化不能忘记
this.weapon = new Item();
this.weapon.id = int.Parse(weaponNode.SelectSingleNode("id").InnerText);
this.weapon.num = int.Parse(weaponNode.SelectSingleNode("num").InnerText);
XmlNode listIntNode = playerInfo.SelectSingleNode("listInt");
XmlNodeList intList = listIntNode.SelectNodes("int");
this.listInt = new List<int>();
for (int i = 0; i < intList.Count; i++)
{
this.listInt.Add(int.Parse(intList[i].InnerText));
}
XmlNode itemList = playerInfo.SelectSingleNode("itemList");
XmlNodeList items = itemList.SelectNodes("Item");
this.itemList = new List<Item>();
//对单一类别的节点 用 foreach和for都可以
foreach (XmlNode item in items)
{
Item item2 = new Item();
item2.id = int.Parse(item.Attributes["id"].Value);
item2.num = int.Parse(item.Attributes["num"].Value);
this.itemList.Add(item2);
}
XmlNode itemDic = playerInfo.SelectSingleNode("itemDic");
XmlNodeList keyInt = itemDic.SelectNodes("int");
XmlNodeList valueItem = itemDic.SelectNodes("Item");
this.itemDic = new Dictionary<int, Item>();
for (int i = 0; i < keyInt.Count; i++)
{
int key = int.Parse(keyInt[i].InnerText);
Item item1 = new Item();
item1.id = int.Parse(valueItem[i].Attributes["id"].Value);
item1.num = int.Parse(valueItem[i].Attributes["num"].Value);
this.itemDic.Add(key, item1);
}
}
}
测试
void Start()
{
playerInfo p = new playerInfo();
p.LoadData("PlayerInfo");
}