C#中的xml文件读取

读取文件

要储存的对象为

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值