Unity3D 读写XML文件

本文介绍了在Unity3D环境中使用C#进行XML文件读写的方法,包括所需导入的包和解决在加载XML文件时可能出现的错误问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在程序有时候需要从文本中读取数据,或者把数据保存到文件中,使用XML文件来存储数据是一个不错的选择。下面介绍一下在Unity3D中使用C#如何进行XML文件的读写。

1、需要引入的包

using UnityEngine;
using System.Collections;
using System.Xml;

2、编辑你的XML文件

<?xml version="1.0" encoding="utf-8"?>
<RoleRoot>
  
  <Role faction="0">
    <BaseAttribute   grade="1" force="2" spirit="1" agility="1" endurance="1" wisdom="1"/>
    <FightAttribute  hp="1" mp="1" generalHurt="1" generalDefense="1" skillHurt="1"
             skillDefense="1" generalHurtFactor="1" generalDefenseFactor="1"
                     skillHurtFactor="1" skillDefenseFactor="1"/>
    <RateAttribute   violenceRate="0" killRate="0" breakDefenseRate="0" duckRate="0"
                     withstandRate="0" hitRate="0"/>
    <ValueAttribute  attackOrder="0" money="0" goldBullions="0" bags="0" achievement="0"
                     experience="0" vitality="0"/>
  </Role>
</RoleRoot>
3、读取XML数据

XmlDocument xmlDoc = new XmlDocument();
        TextAsset textAsset = (TextAsset)Resources.Load("createRole");      
        xmlDoc.LoadXml(textAsset.text);
        //xmlDoc.LoadXml(Application.dataPath + @"\createRole.xml");
        XmlNodeList nodeList = xmlDoc.SelectNodes("RoleRoot/Role");
        XmlNode node;
        switch (faction)
        {
            case FACTION.Monk:
                node = nodeList[0];
                break;
            case FACTION.Taoist:
                node = nodeList[1];
                break;
            case FACTION.Flower:
                node = nodeList[2];
                break;
            default:
                node = nodeList[3];
                break;
        }
         
        //XmlNode baseAttribute=node.SelectNodes("BaseAttribute");
        XmlNode baseAttribute = node.ChildNodes[0];
        grade = XmlConvert.ToInt32(baseAttribute.Attributes["grade"].Value);
        force = XmlConvert.ToInt32(baseAttribute.Attributes["force"].Value);
        spirit = XmlConvert.ToInt32(baseAttribute.Attributes["spirit"].Value);
        agility = XmlConvert.ToInt32(baseAttribute.Attributes["agility"].Value);
        endurance = XmlConvert.ToInt32(baseAttribute.Attributes["endurance"].Value);
        wisdom = XmlConvert.ToInt32(baseAttribute.Attributes["wisdom"].Value);

在加载xml文件的时候xmlDoc.LoadXML()可能会出现这样的错误

XmlException: Text node cannot appear in this state. Line 1, position 1. 

Mono.Xml2.XmlTextReader.ReadText (Boolean notWhitespace) 

Mono.Xml2.XmlTextReader.ReadContent () Mono.Xml2.XmlTextReader.Read () 

出现这个错误的原因是因为Unity3D加载XML文件的时候,XML文件必须保存为UTF-8编码的格式,同时还必须去掉开头的两个字节(BOM)用来标识UTF-8用的。这时你可以选择一些编辑工具另存为UTF-8,(有些工具默认的会为UTF-8编码添加一个BOM标识),比如你可以使用eclipse导出xml,这样就不含有BOM标识。还有其他一些解决办法:给个链接吧:http://answers.unity3d.com/questions/10904/xmlexception-text-node-canot-appear-in-this-state.html



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值