unity3D 手机读取XML,安卓下为什么读取不了
2015-01-20 01:09
330 查看
我们都知道如果将档案或Prefab放到Resources的资料夹,就可以透过Resources这个class读取资料夹中的档案或Prefab。我们也知道在Unity里头,可以使用.NET Framework的XmlReader来读取XML档案。我们更清楚,使用Application.dataPath可以取得Assert资料夹的位置。所以当你把XML档案放置於Resources资料夹中,你要怎么读取这个档案呢?Unity3D教程手册
我会使用XmlReader这个Class,然后档案读取路径为:Application.dataPath + “Resources/expTable.xml”。接着用MS给的范例读取我要的资料,如下所示:
一切就绪,启动Editor,资料正常!Unity3D教程手册。慢着~怎么放上Android手机後不正常?对!你中招了,因为Application.dataPath在手机上所表示的路径根本不是Asset资料夹所在的位置,而是:
所以在PC可以Loading的档案,现在变成找不到!解法的办法是:
OK!完成!
补充:
TextAsset可以支援UTF-8的编码,如果有使用中文的朋友,记得把XML档案存成UTF-8格式。在Windows底下,你可以使用PSPad,到“格式” -> “UTF-8″ 後存档即可。
XmlDocument和XElement在读取Xml时要将整个Xml文档放到内存中去操作,这样做操作简单,但是很费内存和IO(可能是磁盘IO或者网络IO);而在有些场景下我们必须考虑尽可能节省内存和IO的开销,这时候就该XmlReader和XmlWriter出场了。
XmlReader读取Xml需要通过Read()实例方法,不断读取Xml文档中的声明,节点开始,节点内容,节点结束,以及空白等等,直到文档结束,Read()方法返回false。
如下读取Xml内容实例代码和注释说明
如果觉得代码不明白,下面是一张读取顺序图,标明了读取顺序号和每次读取的内容,如下图所示:
从图中可以看到XmlReader在读取这段Xml时:
第1次Read()读取的是Xml文档声明部分
第2次Read()读取的是声明后的空白
第3次Read()读取的是根节点root的开始标签
第4次Read()读取的是根节点开始后的空白
第5次Read()读取的是cat节点的开始部分,从左尖括号到右尖括号包括该节点的属性
第6次读取的是cat节点的内容
第7次读取的是cat节点的结束标签
第8次读取的是cat节点结束标签后的空白
第9次读取的是dog节点的开始部分,注意是从左尖括号开始到结束斜杠之前
第10次读取的是dog标签的结束/>
第11次读取的是dog标签结束后的空白
第12次读取的是root的结束标签
我会使用XmlReader这个Class,然后档案读取路径为:Application.dataPath + “Resources/expTable.xml”。接着用MS给的范例读取我要的资料,如下所示:
01 | while( reader.Read() ) { |
02 | |
03 | switch( reader.NodeType ) { |
04 | |
05 | case XmlNodeType.Element: |
06 | |
07 | break; |
08 | |
09 | } |
10 | |
11 | } |
1 | /mnt/asec/com.xxx.projectx/pkg.apk (以Android为例) |
1 | //一样利用Resources class读取xml,只是先暂时转换成TextAsset |
2 | |
3 | TextAsset t = Resources.Load(“expTable”) as TextAsset ; |
4 | |
5 | //接着再转换成XmlReader |
6 | |
7 | XmlReader reader = XmlReader.Create( new StringReader( t.text ) ); |
补充:
TextAsset可以支援UTF-8的编码,如果有使用中文的朋友,记得把XML档案存成UTF-8格式。在Windows底下,你可以使用PSPad,到“格式” -> “UTF-8″ 後存档即可。
XmlDocument和XElement在读取Xml时要将整个Xml文档放到内存中去操作,这样做操作简单,但是很费内存和IO(可能是磁盘IO或者网络IO);而在有些场景下我们必须考虑尽可能节省内存和IO的开销,这时候就该XmlReader和XmlWriter出场了。
XmlReader读取Xml需要通过Read()实例方法,不断读取Xml文档中的声明,节点开始,节点内容,节点结束,以及空白等等,直到文档结束,Read()方法返回false。
如下读取Xml内容实例代码和注释说明
//玉开技术博客:http://blog.csdn.net/yukaizhao using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.IO; namespace UseXmlReader { class Program { static void Main(string[] args) { //声明StringReader传入Xml文本,作为XmlReader.Create的参数 using (StringReader strRdr = new StringReader(@"<?xml version=""1.0"" encoding=""utf-8"" ?> <root> <cat color=""white"">I'm a Cat</cat> <dog color=""yellow""/> </root>")) { //通过XmlReader.Create静态方法创建XmlReader实例 using (XmlReader rdr = XmlReader.Create(strRdr)) { //循环Read方法直到文档结束 while (rdr.Read()) { Console.WriteLine("rdr.NodeType = " + rdr.NodeType); //如果是开始节点 if (rdr.NodeType == XmlNodeType.Element) { //通过rdr.Name得到节点名 string elementName = rdr.Name; Console.WriteLine(elementName + " element start"); if (elementName == "root") { } //读取到cat元素 这时rdr.Read()读取到的内容为<cat color="white"> else if (elementName == "cat") { //可以通过中括号获得属性值 string colorVal = rdr["color"]; Console.WriteLine("\tcat's color is " + colorVal); //读取到节点内文本内容 if(rdr.Read()) { //通过rdr.Value获得文本内容 Console.WriteLine("\t cat said:" + rdr.Value); } } } else if (rdr.NodeType == XmlNodeType.EndElement) { //在节点结束时也可以通过rdr.Name获得节点名字 string elementName = rdr.Name; Console.WriteLine(elementName + " element end"); } } } } Console.Read(); } } }
如果觉得代码不明白,下面是一张读取顺序图,标明了读取顺序号和每次读取的内容,如下图所示:
从图中可以看到XmlReader在读取这段Xml时:
第1次Read()读取的是Xml文档声明部分
第2次Read()读取的是声明后的空白
第3次Read()读取的是根节点root的开始标签
第4次Read()读取的是根节点开始后的空白
第5次Read()读取的是cat节点的开始部分,从左尖括号到右尖括号包括该节点的属性
第6次读取的是cat节点的内容
第7次读取的是cat节点的结束标签
第8次读取的是cat节点结束标签后的空白
第9次读取的是dog节点的开始部分,注意是从左尖括号开始到结束斜杠之前
第10次读取的是dog标签的结束/>
第11次读取的是dog标签结束后的空白
第12次读取的是root的结束标签
相关文章推荐
- 为什么安卓的APP都要读取手机中已安装的应用列表
- [Unity3d]关于红米2和小米2等安卓手机为什么不支持 ETC2压缩模式
- 安卓手机与Unity3D的连接
- 在Unity3D中使用Mono.XML读取XML文件
- 【综合】为什么每卖出一部安卓手机微软都能从中赚取5-15美元?
- 安卓中读取xml的几种方法(有你不知道的)
- Unity3D读取XML内容代码
- 为什么从XML文件中读取的/n或者 /r/n不能在MessageBox中换行
- unity3d读取plist或xml文件
- 为什么每卖出一部安卓手机微软都能从中赚取5-15美元?
- unity3d使用Mono.Xml读取xml
- Unity3d 新建xml 读取xml
- Manifest.xml中删除了『存储/修改删除SD卡中的内容』和『手机通话/读取手机状态和身份』权限,但生成apk安装软件时仍提示 允许应用程序了解或使用这两个权限
- Unity3d 读取网络xml
- 【转】手机”读取XML
- 为什么每卖出一部安卓手机微软都能从中赚取5-15美元?(专利流氓)
- Unity3D如何读取保存XML,以及用U3D内置方式保存文件
- 教你修改安卓手机开机第二屏动画。(以及你为什么失败的原因)
- unity3d学习笔记(十六)--unity3d读取plist或xml文件
- 安卓实训第十天:利用SharedPreferences来实现数据的保存和读取,以及实现手机电话备份,XMLserializer