zoukankan      html  css  js  c++  java
  • Unity3D_08_XML文件创建,读取,修改,添加

    Unity3D_08_XML文件创建,读取,修改,添加

     本文转载:https://www.cnblogs.com/NBOWeb/p/8968036.html

    今天在工作之余学习了一下关于Unity中关于XML的部分。 
    在这里要注意添加两个命名空间,如下:

    一、xml的解析

    首先新建一个xml,可以命名为item.xml,拖进assets里面,内容如下:

    复制代码
     1 <item>
     2   <item1>
     3     <id>1</id>
     4     <name>china</name>
     5     <year>2016</year>
     6   </item1>
     7   <item2>
     8     <id>2</id>
     9     <name>usa</name>
    10     <year>2017</year>
    11   </item2>
    12 </item>
    复制代码

    通过这个xml来解析。然后写一个.cs文件,注意需要导入这两个头文件

    1 using System.Xml;     //xml操作
    2 using System.IO;     //file操作

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

    解析函数如下:

    复制代码
     1 //解析xml
     2     void parseXml(){
     3         //也可以前面加上@,区别就是有@的话,双引号里面的内容不转义,比如" " "
     4         //string filePath = Application.dataPath+@"/Resources/item.xml";
     5         string filePath = Application.dataPath+"/Resources/item.xml";
     6         if(File.Exists(filePath)){
     7             XmlDocument xmlDoc = new XmlDocument();
     8             xmlDoc.Load(filePath);
     9             XmlNodeList node = xmlDoc.SelectSingleNode("item").ChildNodes;
    10             //遍历节点
    11             foreach(XmlElement ele in node){
    12                 //item下面的节点
    13                 Debug.Log(ele.Name);
    14 
    15                 if(ele.Name == "item1"){
    16                 //first item1
    17                     foreach(XmlElement i1 in ele.ChildNodes){
    18                         Debug.Log(i1.Name);
    19                         if(i1.Name == "id"){
    20                             id1 = i1.InnerText;
    21                         }
    22                         if(i1.Name == "name"){
    23                             name1 = i1.InnerText;
    24                         }
    25                         if(i1.Name=="year"){
    26                             year1 = i1.InnerText;
    27                         }
    28                     }
    29                 }
    30                 if(ele.Name == "item2"){
    31                     //first item1
    32                     foreach(XmlElement i2 in ele.ChildNodes){
    33                         Debug.Log(i2.Name);
    34                         if(i2.Name == "id"){
    35                             id2 = i2.InnerText;
    36                         }
    37                         if(i2.Name == "name"){
    38                             name2 = i2.InnerText;
    39                         }
    40                         if(i2.Name=="year"){
    41                             year2 = i2.InnerText;
    42                         }
    43                     }
    44                 }
    45 
    46             }
    47         }
    48         Debug.Log("id1:  "+id1);
    49         Debug.Log("name1:  "+name1);
    50         Debug.Log("year1:  "+year1);
    51         Debug.Log("id2:  "+id2);
    52         Debug.Log("name2:  "+name2);
    53         Debug.Log("year2:  "+year2);
    54     }
    复制代码

    通过解析即可得到xml的值 
    这里写图片描述

    后面的增删改其实不怎么用,因为一般都是策划直接修改表,而不用代码修改,但是还是可以看看。

    二:XML文件创建、读取、修改、添加

    代码如下:

    复制代码
      1 using UnityEngine;
      2 using System.Collections;
      3 using System.Xml;
      4 using System.IO;
      5 
      6 public class XMLDemo : MonoBehaviour {
      7     private ArrayList Adialogue = new ArrayList();
      8     private ArrayList Bdialogue = new ArrayList();
      9     private ArrayList textList = new ArrayList();
     10     // Use this for initialization
     11     void Start () {
     12 
     13 
     14     }
     15 
     16     // Update is called once per frame
     17     void Update () {
     18 
     19     }
     20 
     21     void OnGUI() {
     22         if (GUI.Button(new Rect(50, 50, 100, 50), "生成XML"))
     23         {
     24             CreateXML();
     25             Debug.Log("生成XML");
     26         }
     27 
     28         if (GUI.Button(new Rect(50, 100, 100, 50), "读取XML"))
     29         {
     30             LoadXml();
     31             Debug.Log("读取XML");
     32         }
     33 
     34         if (GUI.Button(new Rect(50, 150, 100, 50), "修改XML"))
     35         {
     36             updateXML();
     37             Debug.Log("修改XML");
     38 
     39         }
     40 
     41         if (GUI.Button(new Rect(50, 200, 100, 50), "增加XML节点"))
     42         {
     43             addXMLData();
     44             Debug.Log("增加XML");
     45         }
     46     }
     47 
     48 //创建XML
     49  void CreateXML()
     50     {
     51         string path = Application.dataPath + "/data2.xml";
     52         if (!File.Exists(path))
     53         {
     54             //创建最上一层的节点。
     55             XmlDocument xml = new XmlDocument();
     56             //创建最上一层的节点。
     57             XmlElement root = xml.CreateElement("objects");
     58             //创建子节点
     59             XmlElement element = xml.CreateElement("messages");
     60             //设置节点的属性
     61             element.SetAttribute("id", "1");
     62             XmlElement elementChild1 = xml.CreateElement("contents");
     63 
     64             elementChild1.SetAttribute("name", "a");
     65             //设置节点内面的内容
     66             elementChild1.InnerText = "这就是你,你就是天狼";
     67             XmlElement elementChild2 = xml.CreateElement("mission");
     68             elementChild2.SetAttribute("map", "abc");
     69             elementChild2.InnerText = "去吧,少年,去实现你的梦想";
     70             //把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
     71             element.AppendChild(elementChild1);
     72             element.AppendChild(elementChild2);
     73             root.AppendChild(element);
     74             xml.AppendChild(root);
     75             //最后保存文件
     76             xml.Save(path);
     77         }
     78     }
     79 
     80 //读取XML
     81  void LoadXml()
     82     {
     83         //创建xml文档
     84         XmlDocument xml = new XmlDocument();
     85 
     86         xml.Load(Application.dataPath + "/data2.xml");
     87         //得到objects节点下的所有子节点
     88         XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes;
     89         //遍历所有子节点
     90         foreach (XmlElement xl1 in xmlNodeList)
     91         {
     92 
     93             if (xl1.GetAttribute("id") == "1")
     94             {
     95                 //继续遍历id为1的节点下的子节点
     96                 foreach (XmlElement xl2 in xl1.ChildNodes)
     97                 {
     98                     //放到一个textlist文本里
     99                     //textList.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
    100                     //得到name为a的节点里的内容。放到TextList里
    101                     if (xl2.GetAttribute("name") == "a")
    102                     {
    103                         Adialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
    104                         print("******************"+ xl2.GetAttribute("name") + ": " + xl2.InnerText);
    105                     }
    106                     //得到name为b的节点里的内容。放到TextList里
    107                     else if (xl2.GetAttribute("map") == "abc")
    108                     {
    109                         Bdialogue.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
    110                         print("******************" + xl2.GetAttribute("name") + ": " + xl2.InnerText);
    111                     }
    112                 }
    113             }
    114         }
    115         print(xml.OuterXml);
    116     }
    117 
    118 //修改XML
    119     void updateXML()
    120     {
    121         string path = Application.dataPath + "/data2.xml";
    122         if (File.Exists(path))
    123         {
    124             XmlDocument xml = new XmlDocument();
    125             xml.Load(path);
    126             XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes;
    127             foreach (XmlElement xl1 in xmlNodeList)
    128             {
    129                 if (xl1.GetAttribute("id") == "1")
    130                 {
    131                     //把messages里id为1的属性改为5
    132                     xl1.SetAttribute("id", "5");
    133                 }
    134 
    135                 if (xl1.GetAttribute("id") == "2")
    136                 {
    137                     foreach (XmlElement xl2 in xl1.ChildNodes)
    138                     {
    139                         if (xl2.GetAttribute("map") == "abc")
    140                         {
    141                             //把mission里map为abc的属性改为df,并修改其里面的内容
    142                             xl2.SetAttribute("map", "df");
    143                             xl2.InnerText = "我成功改变了你";
    144                         }
    145 
    146                     }
    147                 }
    148             }
    149             xml.Save(path);
    150         }
    151     }
    152 
    153 //添加XML
    154     void addXMLData()
    155     {
    156         string path = Application.dataPath + "/data2.xml";
    157         if (File.Exists(path))
    158         {
    159             XmlDocument xml = new XmlDocument();
    160             xml.Load(path);
    161             XmlNode root = xml.SelectSingleNode("objects");
    162             //下面的东西就跟上面创建xml元素是一样的。我们把他复制过来就行了
    163             XmlElement element = xml.CreateElement("messages");
    164             //设置节点的属性
    165             element.SetAttribute("id", "2");
    166             XmlElement elementChild1 = xml.CreateElement("contents");
    167 
    168             elementChild1.SetAttribute("name", "b");
    169             //设置节点内面的内容
    170             elementChild1.InnerText = "天狼,你的梦想就是。。。。。";
    171             XmlElement elementChild2 = xml.CreateElement("mission");
    172             elementChild2.SetAttribute("map", "def");
    173             elementChild2.InnerText = "我要妹子。。。。。。。。。。";
    174             //把节点一层一层的添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
    175             element.AppendChild(elementChild1);
    176             element.AppendChild(elementChild2);
    177 
    178             root.AppendChild(element);
    179 
    180             xml.AppendChild(root);
    181             //最后保存文件
    182             xml.Save(path);
    183         }
    184     }
  • 相关阅读:
    重构二叉树
    Nlog、elasticsearch、Kibana以及logstash
    技术
    Java 的垃圾回收机制(转)
    Java并发编程:并发容器之CopyOnWriteArrayList
    深入理解Arrays.sort() (转)
    浅析java的浅拷贝和深拷贝
    gradle
    @action 注解
    如何使用mysql
  • 原文地址:https://www.cnblogs.com/RainZZY/p/12886975.html
Copyright © 2011-2022 走看看