读取文件

要储存的对象为

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);
        }

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐