unity里利用C# 读写XML

作者: 游戏开发小Y | 来源:发表于2017-01-18 09:34 被阅读173次

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

1.XML的读取:

using System.Xml;

using System.IO;

private ArrayList Adialogue=new ArrayList();
private ArrayList Bdialogue=new ArrayList();

void LoadXml()
    {
        //创建xml文档
        XmlDocument xml = new XmlDocument();
        XmlReaderSettings set = new XmlReaderSettings();
        set.IgnoreComments = true;//这个设置是忽略xml注释文档的影响。有时候注释会影响到xml的读取
        xml.Load(XmlReader.Create((Application.dataPath+"/data.xml"),set));
        //得到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);
                   }
                   //得到name为b的节点里的内容。放到TextList里
                   else if (xl2.GetAttribute("name") == "b")
                   {
                       Bdialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
                   }
               }
           }
        }
        print(xml.OuterXml);
        
    }

2、修改MXL

void updateXML()
    {
        string path = Application.dataPath + "/data.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);
        }
    }

3、现在到创建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);
        }
    }

又到了看效果的时候了。我们可以看到在assets的目录下多了一个data2.xml文件。(可能出现的有点慢,unity来不及刷新,大家可以到文件夹里看下。)


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);
        }
    }

相关文章

  • unity里利用C# 读写XML

    在开发中,我们经常有遇到要处理大量字符串的情况,这时候XML就起到了非常重要的作用。C# 中是如何处理XML的呢,...

  • 使用C#代码读写XML文件

    使用C#代码读写XML文件 一、创建XML文件 new 一个XmlDocument 对象之后,再调用Save方法,...

  • 5.19XML数据生成和数据解析

    在Unity引擎中如何生成本地XML数据? 第一步:引用C#的命名空间System.Xml 第二步:生成XML文档...

  • unity & C#相关

    事件和委托 C#事件和Unity3d - CSDN博客 Unity常用的函数和遇到的C#的知识整理 Unity常用...

  • VSCode——愉快的写C#

    写Unity项目 VSCode安装插件C#,并在Unity中选择OpenC#Project,此时C#代码智能提示功...

  • InjectFix实现原理

    Tags: C#, Unity, 热更新 简介 InjectFix是腾讯开源的Unity C#热更新解决方案。本文...

  • Unity中C#和Java的相互调用

    1、通过C#调用Java的方法: 在C#中添加调用的一些代码,利用Unity提供的一些接口实现调用Java! 在j...

  • unity与android 、ios交互

    unity和ios交互: unity调用ios的方法: c#:[DllImport("__Internal")] ...

  • 如何Unity3D自动生成C#注释模板?

    在Unity编辑器中新建一个C#脚本的时候,Unity会调用“Unity:\unity\Editor\Resour...

  • C# Job System

    1、C# Job System特点 (1)提供C# API,用户可以借助Unity C# Job System更简...

网友评论

    本文标题:unity里利用C# 读写XML

    本文链接:https://www.haomeiwen.com/subject/mvvvbttx.html