Unity中的XML文件创建,读取,修改,添加

原创 2016年06月02日 09:06:56

今天在工作之余看了关于unity中关于XML的部分。在这里要注意添加两个命名空间

using System.Xml;
using System.IO;

一个是对XML文件的命名空间,里面有关xml的很多api
一个是对文件读写的命名空间,是对文件的读取,保存操作。

直接上代码吧,里面有注释

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

public class XMLDemo : MonoBehaviour {
    private ArrayList Adialogue = new ArrayList();
    private ArrayList Bdialogue = new ArrayList();
    private ArrayList textList = new ArrayList();
    // Use this for initialization
    void Start () {


    }

    // Update is called once per frame
    void Update () {

    }

    void OnGUI() {
        if (GUI.Button(new Rect(50, 50, 100, 50), "生成XML"))
        {
            CreateXML();
            Debug.Log("生成XML");
        }

        if (GUI.Button(new Rect(50, 100, 100, 50), "读取XML"))
        {
            LoadXml();
            Debug.Log("读取XML");
        }

        if (GUI.Button(new Rect(50, 150, 100, 50), "修改XML"))
        {
            updateXML();
            Debug.Log("修改XML");

        }

        if (GUI.Button(new Rect(50, 200, 100, 50), "增加XML节点"))
        {
            addXMLData();
            Debug.Log("增加XML");
        }
    }

    void CreateXML()
    {
        string path = Application.dataPath + "/data2.xml";
        if (!File.Exists(path))
        {
            //创建最上一层的节点。
            XmlDocument xml = new XmlDocument();
            //创建最上一层的节点。
            XmlElement root = xml.CreateElement("objects");
            //创建子节点
            XmlElement element = xml.CreateElement("messages");
            //设置节点的属性
            element.SetAttribute("id", "1");
            XmlElement elementChild1 = xml.CreateElement("contents");

            elementChild1.SetAttribute("name", "a");
            //设置节点内面的内容
            elementChild1.InnerText = "这就是你,你就是天狼";
            XmlElement elementChild2 = xml.CreateElement("mission");
            elementChild2.SetAttribute("map", "abc");
            elementChild2.InnerText = "去吧,少年,去实现你的梦想";
            //把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
            element.AppendChild(elementChild1);
            element.AppendChild(elementChild2);
            root.AppendChild(element);
            xml.AppendChild(root);
            //最后保存文件
            xml.Save(path);
        }
    }


    void LoadXml()
    {
        //创建xml文档
        XmlDocument xml = new XmlDocument();

        xml.Load(Application.dataPath + "/data2.xml");
        //得到objects节点下的所有子节点
        XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes;
        //遍历所有子节点
        foreach (XmlElement xl1 in xmlNodeList)
        {

            if (xl1.GetAttribute("id") == "1")
            {
                //继续遍历id为1的节点下的子节点
                foreach (XmlElement xl2 in xl1.ChildNodes)
                {
                    //放到一个textlist文本里
                    //textList.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
                    //得到name为a的节点里的内容。放到TextList里
                    if (xl2.GetAttribute("name") == "a")
                    {
                        Adialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
                        print("******************"+ xl2.GetAttribute("name") + ": " + xl2.InnerText);
                    }
                    //得到name为b的节点里的内容。放到TextList里
                    else if (xl2.GetAttribute("map") == "abc")
                    {
                        Bdialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
                        print("******************" + xl2.GetAttribute("name") + ": " + xl2.InnerText);
                    }
                }
            }
        }
        print(xml.OuterXml);
    }


    //修改
    void updateXML()
    {
        string path = Application.dataPath + "/data2.xml";
        if (File.Exists(path))
        {
            XmlDocument xml = new XmlDocument();
            xml.Load(path);
            XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes;
            foreach (XmlElement xl1 in xmlNodeList)
            {
                if (xl1.GetAttribute("id") == "1")
                {
                    //把messages里id为1的属性改为5
                    xl1.SetAttribute("id", "5");
                }

                if (xl1.GetAttribute("id") == "2")
                {
                    foreach (XmlElement xl2 in xl1.ChildNodes)
                    {
                        if (xl2.GetAttribute("map") == "abc")
                        {
                            //把mission里map为abc的属性改为df,并修改其里面的内容
                            xl2.SetAttribute("map", "df");
                            xl2.InnerText = "我成功改变了你";
                        }

                    }
                }
            }
            xml.Save(path);
        }
    }

    //添加XML
    void addXMLData()
    {
        string path = Application.dataPath + "/data2.xml";
        if (File.Exists(path))
        {
            XmlDocument xml = new XmlDocument();
            xml.Load(path);
            XmlNode root = xml.SelectSingleNode("objects");
            //下面的东西就跟上面创建xml元素是一样的。我们把他复制过来就行了
            XmlElement element = xml.CreateElement("messages");
            //设置节点的属性
            element.SetAttribute("id", "2");
            XmlElement elementChild1 = xml.CreateElement("contents");

            elementChild1.SetAttribute("name", "b");
            //设置节点内面的内容
            elementChild1.InnerText = "天狼,你的梦想就是。。。。。";
            XmlElement elementChild2 = xml.CreateElement("mission");
            elementChild2.SetAttribute("map", "def");
            elementChild2.InnerText = "我要妹子。。。。。。。。。。";
            //把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
            element.AppendChild(elementChild1);
            element.AppendChild(elementChild2);

            root.AppendChild(element);

            xml.AppendChild(root);
            //最后保存文件
            xml.Save(path);
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址:http://blog.csdn.net/yy763496668

相关文章推荐

unity里利用C# 读写XML

在开发中,我们经常有遇到要处理大量字符串的情况,这时候XML就起到了非常重要的作用。C# 中是如何处理XML的呢,下面我们通过一些简单的例子代码去认识了解一下。 XML的读取: 这里我随便...

Unity3D读取XML文档信息

using System; using UnityEngine; using System.IO; using System.Xml; using System.Linq; using System....

unity 中编写xml

谁能帮帮我,这太让我头疼了!网上还没有人能很好地解释我的问题。 我所需要的是:我需要有个人来解释怎样在Unity中创建XML文件。人们告诉我去看看stream writer。我搜了一下,但是没有人给...

Unity3d-XML简介-增加,删除,修改

什么是XML?扩展性标识语言 Extensible Markup Language 标签可以自定义 用于数据信息的描述,它是被设计用来传输和存储数据。XML被设计用来结构化、存储...

关于Unity的几种XML读取方式

最近在用Unity做手机游戏,其中关卡解锁信息需要用xml保存 那么问题就来了,Unity有多种路径操作的方法,但是对于移动端,有的方法只能读不能写…… 于是我去上网查了点资料 (参考资料:http:...

XML在Unity中使用

Xml在Unity中使用,使用Mono.Xml 不使用System.xml。

Unity创建并保存XML

using UnityEngine; using System.Collections; using System.IO; using System.Xml; public class XMLTes...

Unity3D 读写XML文件

在程序有时候需要从文本中读取数据,或者把数据保存到文件中,使用XML文件来存储数据是一个不错的选择。下面介绍一下在Unity3D中使用C#如何进行XML文件的读写。 1、需要引入的包 usin...
  • YeSy10
  • YeSy10
  • 2012年07月13日 16:15
  • 14379

Unity3D 读取XML文件里面的属性

Unity3D 读取XML文件里面的属性using System.Collections; using System.Collections.Generic; using System.IO; usi...

Unity3D C# 读写XML

效果 代码 using UnityEngine; using System.IO; using System.Xml; using System.Collections; public c...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity中的XML文件创建,读取,修改,添加
举报原因:
原因补充:

(最多只允许输入30个字)