在程序有时候需要从文本中读取数据,或者把数据保存到文件中,使用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>
- 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
原文地址:http://blog.csdn.net/yesy10/article/details/7744457