开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

首页   >   博客   >   18803836360

打包时读取xml文件

个人分类: cp | 2017-12-6 09:58

那么解决方法很简单:

1,建立一个新工程

创建一个StreamingAssets文件夹,将xml文件放进去

3,该贴代码了

 

复制代码
//------------------------------------------------------------------------------
// <auto-generated>
//     此代码由工具生成。
//     运行时版本:4.0.30319.18063
//
//     对此文件的更改可能会导致不正确的行为,并且如果
//     重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using UnityEngine;
using System.IO;
using System.Xml;
using System.Linq;
using System.Text;
using System.Collections;
using System.Collections.Generic;


namespace AssemblyCSharp1
{
    
    public class AddressData1
    {
        public string timeURL;
        public static string all;
        public static string hp;        
        public static string speed;
        public static string demage;
        
        public static string localPath;
        public static string id;
        public static string score;
        public static List<int> allScore;

        public void AddressData ()
        {
            Debug.Log (localPath);
        }

        public static List<int> getAllScore()
        {
            return allScore;
        }

        /// <summary>
        /// 获取XML路径
        /// </summary>
        /// <returns>The XM.</returns>
        public static IEnumerator GetXML()
        {
            if(Application.platform==RuntimePlatform.)
            {
                localPath = Application.streamingAssetsPath+"/score.xml"; //在Android中实例化WWW不能在路径前面加"file://"
                Debug.Log (localPath);
            }
            else
            {
                localPath = "file://"+UnityEngine.Application.streamingAssetsPath + "/score.xml";//在Windows中实例化WWW必须要在路径前面加"file://"
                
                Debug.Log (localPath);
            }
            WWW www = new WWW(localPath);
            while (!www.isDone)
            {
                Debug.Log("Getting GetXML");
                yield return www;
                all = www.text;
                ParseXml(www);
            }
        }
        
        /// <summary>
        ///按属性获取节点
        /// </summary>
        /// <param name="www">Www.</param>
        public static void ParseXml(WWW www) 
        {
            if(allScore == null)
            {
                allScore =new List<int>();
            }
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(www.text);
            XmlNodeList nodeList=xmlDoc.SelectSingleNode("rank").ChildNodes;
            
            foreach(XmlElement xe in nodeList)
            {
                id = xe.GetAttribute("id");
                score = xe.GetAttribute("score");
                allScore.Add(int.Parse(score));  //将所有得分读入List

                Debug.Log ("ID:"+id+" Score:"+score);
            }
            allScore.Sort();
            allScore.Reverse();
            foreach(var score in allScore )
            {
                Debug.Log (score.ToString());
            }
        }
        
        /// <summary>
        /// 读取xml内容
        /// </summary>
        public static IEnumerator load()
        {
            string url = string.Empty;
            string path = string.Empty;
            string line1 = string.Empty;
            if(Application.platform==RuntimePlatform.Android)
            {
                url=Application.streamingAssetsPath+"/hp.xml"; //在Android中实例化WWW不能在路径前面加"file://"
                
                WWW wWA=new WWW(path);///WWW读取在各个平台上都可使用
                yield return wWA; 
                line1=wWA.text;
                Debug.Log (line1);
            }
            else
            {
                url="file://"+Application.streamingAssetsPath+"/hp.xml";//在Windows中实例化WWW必须要在路径前面加"file://"
                WWW wWA=new WWW("file://"+url);
                yield return wWA; 
                line1=wWA.text;
                Debug.Log (line1);
            }
            yield return null;
        }


        /// <summary>
        /// 加载xml文档
        /// </summary>
        /// <returns></returns>
        public static  XmlDocument ReadAndLoadXml()
        {
            XmlDocument doc = new XmlDocument();
            //Debug.Log("加载xml文档");
            doc.Load(localPath);
            return doc;
        }

        /// <summary>
        /// 增加节点
        /// </summary>
        /// <returns>The node.</returns>
        /// <param name="score">Score.</param>
        public static void insertNode(int score)
        {
            int minute=int.Parse((System.DateTime.Now.Minute.ToString()));
            string order = System.DateTime.Now.Hour+""+System.DateTime.Now.Minute+""+System.DateTime.Now.Second;
            XmlDocument xmlDoc=new XmlDocument();
            xmlDoc.Load(Application.dataPath + "/StreamingAssets/score.xml");
            XmlNode root=xmlDoc.SelectSingleNode("rank");
            
            XmlElement xel=xmlDoc.CreateElement("rank");    //建立节点
            xel.SetAttribute("id",order);
            xel.SetAttribute("score",score.ToString());
            
            root.AppendChild(xel);
            xmlDoc.Save(Application.dataPath + "/StreamingAssets/score.xml");
            return;
        }

    }


}
复制代码

测试读取数据代码:

复制代码
using UnityEngine;
using System.Collections;
using AssemblyCSharp1;

public class testinsert : MonoBehaviour 
{
    public GUIText guitext;
    public GUIText platform;
    string allscores="";

    void Awake()
    {
        if(Application.platform==RuntimePlatform.Android)
        {
            platform.text = "Android";
        }
        else
        {
            platform.text = "PC";
        }
    }

    // Use this for initialization
    void Start () 
    {

        StartCoroutine(AddressData1.GetXML());
        //AddressData1.insertNode(22);

    }

    void OnGUI()
    {
        if(GUI.Button(new Rect(100,100,40,40),"load"))
        {
            foreach(int score in AddressData1.allScore)
            {
                allscores+=score.ToString();
                guitext.text+="\t";
            }
            guitext.text = allscores;
        }
    }

    // Update is called once per frame
    void Update () 
    {
    
    }
}
复制代码

XML文件:
score.xml

<?xml version="1.0" encoding="UTF-8" ?>
<rank>
    <rank id="5618" score="12" ></rank>
    <rank id="1712" score="14" ></rank>
</rank>
0 0

作者的其他最新博客

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册帐号

个人分类

标签

阅读排行

评论排行

推荐博客

最新博客

返回顶部