Unity各类数据库的基本操作(四)-- XML

来源:互联网 发布:个性化菜单 软件 编辑:程序博客网 时间:2024/05/29 17:06

XML:

格式:

<?头文件?>

    <根节点名  键 = “值”>

         <子节点名>

               <子节点名>

                   <子节点名>      内容         </子节点名>

                   <子节点名>      内容         </子节点名>

               </子节点名>

         </子节点名>

         <子节点名>

               <子节点名>

                   <子节点名>      内容         </子节点名>

                   <子节点名>      内容         </子节点名>

            </子节点名>

        </子节点名>

     </根节点名>


1.MAC系统,在Unity工程目录新建C#脚本,右击找到文件位置改后缀名



试着写入下面见识面板里的内容:


注释:<!--内容-->

<? xml version = "1.0" encoding = "UTF-8" ?><!--头文件-->
<GameObject name = "Cube">
    <Transform>
        <position>
            <x>0</x>
            <y>0</y>
            <z>0</z>
        </position>
        <Rotation>
            <x>0</x>
            <y>0</y>
            <z>0</z>
        </Rotation>
        <Scale>
            <x>1</x>
            <y>1</y>
            <z>1</z>
        </Scale>
    </Transform>
    <BoxCollider>
        <isTrigger>false</isTrigger>
        <Material>null</Material>
        <Center>
            <x>0</x>
            <y>0</y>
            <!--<z>0</z>注释的方法-->
        </Center>
        <Size>
            <x>1</x>
            <y>1</y>
            <z>1</z>
        </Size>
    </BoxCollider>
</GameObject>

2.在Unity中使用C#脚本对XML文件进行操作:

注意引用明明空间;

using System.Xml;
using System.IO;
using UnityEditor;//编辑器的命名空间

(1)创建XML文档

    void Start () 
    {
        path = Application.dataPath + "/4.xml/XMLData/ChatData01.xml";

    }
    
    void Update () 
    {
        if (Input.GetKeyDown(KeyCode.C)) {
            CreateXML ();
        }
      
    }


    /// <summary>
    /// 创建xml文档
    /// </summary>
    void CreateXML(){
        
        //如果文件不存在
        if (!File.Exists(path)) 
        {
            //创建xml文档对象
            XmlDocument doc = new XmlDocument ();
            //创建xml头文件
            XmlNode xmlHead = doc.CreateXmlDeclaration("1.0","UTF-8",null);
            //添加头到xml文档里
            doc.AppendChild(xmlHead);

            //创建根节点(最上一层的)
            XmlElement root = doc.CreateElement("objects");
            //创建子节点
            XmlElement element = doc.CreateElement("massages");
            //设置子节点的属性
            element.SetAttribute("id","1101");
          
            XmlElement element01 = doc.CreateElement ("contents");
            element01.SetAttribute ("name", "The1");
            element01.InnerText = "嗨!骚年,你醒了?";
          
            XmlElement element02 = doc.CreateElement ("missions");
            element02.SetAttribute ("name", "The2");
            element02.InnerText = "我是谁,我这是在哪里?";
           
            //把添加子节点放到一起,一层一层的添加,不容易出错
                //添加根节点到xml文档
                doc.AppendChild (root);
                //在根节点下添加子节点
                root.AppendChild(element);
                //在element(massages)目录下添加子节点
                element.AppendChild (element01);
                //再在element(massages)目录下添加一个子节点
                element.AppendChild (element02);

            //保存生成真正的文档
            doc.Save (path);

            //刷新视图
            #if UNITY_EDITOR
            AssetDatabase.Refresh();
            #endif

        }
    }

(2)解析XML   doc.Load (path);//下载指定路径下已经建立好的,或者导入的XML文档

    string path ;
    private ArrayList ALThe1 = new ArrayList();
    private ArrayList ALThe2 = new ArrayList();

    void Start () 
    {
        path = Application.dataPath + "/4.xml/XMLData/ChatData01.xml";

    }

    void Update () 
    {
      
        if (Input.GetKeyDown(KeyCode.L)) {
            LoadXML ();
        }
       
    }

    /// <summary>
    /// 解析XML
    /// </summary>
    void LoadXML()
    {
        if (!File.Exists(path))
        {
            return;
        }
        //创建一个xml的对象
        XmlDocument doc = new XmlDocument();
        //会下载path路径下的xml文件(获得),此时doc = path
        doc.Load (path);
        //得到objects底下的所有子节点.SelectSingleNode是获得所有子节点
        XmlNodeList xmlNodeList = doc.SelectSingleNode("objects").ChildNodes;

        //遍历xmlNodeList的所有的子节点,(也就一个massages)
        foreach (XmlElement xe_01 in xmlNodeList) {
            //如果遍历到的massages的id = 1101
            if (xe_01.GetAttribute("id").Equals("1101")) {
                //继续遍历id是1101的节点(massages)下的子节点
                foreach (XmlElement xe_02 in xe_01.ChildNodes) 
                {
                //得到name是The1的节点里面的内容,放到ArrayList中
                    if (xe_02.GetAttribute("name").Equals("The1")) {
                        ALThe1.Add (xe_02.GetAttribute ("name") + ":" + xe_02.InnerText);
                        print ("ALThe1添加了:" + xe_02.GetAttribute ("name") + ":" + xe_02.InnerText);
                    }

                //得到name是The2的节点里面的内容,放到另一个ArrayList中
                    if (xe_02.GetAttribute("name").Equals("The2")) {
                        ALThe2.Add (xe_02.GetAttribute ("name") + ":" + xe_02.InnerText);
                        print ("ALThe2添加了:" + xe_02.GetAttribute("name") + ":" + xe_02.InnerText);
                    }

                }
            }
        }
    }


(3)更新XML文档里的内容:

   void Start () 
    {
        path = Application.dataPath + "/4.xml/XMLData/ChatData01.xml";

    }
    
    void Update () 
    {
       
        if (Input.GetKeyDown(KeyCode.U)) {
            UpdataXML ();
        }
       
    }

    /// <summary>
    /// 更新
    /// </summary>
    void UpdataXML()
    {
        if (!File.Exists (path)) {
            print ("文件不存在");
            return;
        } 

        XmlDocument doc = new XmlDocument ();
        doc.Load (path);
        //得到objects地下所有的节点
        XmlNodeList xmlNodeList = doc.SelectSingleNode ("objects").ChildNodes;

        foreach (XmlElement xe_01 in xmlNodeList) {
            if (xe_01.GetAttribute("id").Equals("1101")) {
                xe_01.SetAttribute ("id","1010");
                foreach (XmlElement xe_02 in xe_01.ChildNodes) {
                    if (xe_02.GetAttribute("name") == "The2") {

                        //将missions的属性改成The3;
                        xe_02.SetAttribute("name","The3");
                        //更改内容
                        xe_02.InnerText = "没想到一觉醒来,什么事都忘了";

                    }
                }
            }

        }
        //保存刷新
        doc.Save (path);
        #if UNITY_EDITOR
        AssetDatabase.Refresh();
        #endif
    }


(4)添加内容

    void Start () 
    {
        path = Application.dataPath + "/4.xml/XMLData/ChatData01.xml";

    }
    
    void Update () 
    {
      
        if (Input.GetKeyDown(KeyCode.A)) {
            AddXML ();
        }
    }

    /// <summary>
    /// 添加
    /// </summary>
    void AddXML()
    {
        if (!File.Exists (path)) {
            print ("文件不存在");
        
        } else {
        
            XmlDocument doc = new XmlDocument ();
            doc.Load (path);
            XmlNode root = doc.SelectSingleNode ("objects");
            //
            XmlElement element = doc.CreateElement("messages");
            element.SetAttribute ("id", "1002");

            XmlElement element_1 = doc.CreateElement ("contents_01");
            element_1.SetAttribute ("name", "The4");

            //设置子节点里面的内容
            element_1.InnerText = "啊!头好疼";

            XmlElement element_2 = doc.CreateElement ("contents_03");

            element_2.SetAttribute ("name","The5");
            element_2.InnerText = "我想起来了,没想到是他!";

            root.AppendChild (element);
            element.AppendChild (element_1);
            element.AppendChild (element_2);

            doc.Save (path);


        }
    }


完整代码:

using UnityEngine;using System.Collections;using System.Xml;using System.IO;using UnityEditor;//编辑器的命名空间public class Data_XML : MonoBehaviour {string path ;private ArrayList ALThe1 = new ArrayList();private ArrayList ALThe2 = new ArrayList();void Start () {path = Application.dataPath + "/4.xml/XMLData/ChatData01.xml";}//end_Startvoid Update () {if (Input.GetKeyDown(KeyCode.C)) {CreateXML ();}if (Input.GetKeyDown(KeyCode.L)) {LoadXML ();}if (Input.GetKeyDown(KeyCode.U)) {UpdataXML ();}if (Input.GetKeyDown(KeyCode.A)) {AddXML ();}}//end_Update/// <summary>/// 创建xml文档/// </summary>void CreateXML(){//如果文件不存在if (!File.Exists(path)) {//创建xml文档对象XmlDocument doc = new XmlDocument ();//创建xml头文件XmlNode xmlHead = doc.CreateXmlDeclaration("1.0","UTF-8",null);//添加头到xml文档里doc.AppendChild(xmlHead);//创建根节点(最上一层的)XmlElement root = doc.CreateElement("objects");//添加根节点到xml文档//doc.AppendChild (root);//创建子节点XmlElement element = doc.CreateElement("massages");//设置子节点的属性element.SetAttribute("id","1101");//在根节点下添加子节点//root.AppendChild(element);XmlElement element01 = doc.CreateElement ("contents");element01.SetAttribute ("name", "The1");element01.InnerText = "嗨!骚年,你醒了?";//在element(massages)目录下添加子节点//element.AppendChild (element01);XmlElement element02 = doc.CreateElement ("missions");element02.SetAttribute ("name", "The2");element02.InnerText = "我是谁,我这是在哪里?";//再在element(massages)目录下添加一个子节点//element.AppendChild (element02);//把添加子节点放到一起,一层一层的添加,不容易出错//添加根节点到xml文档doc.AppendChild (root);//在根节点下添加子节点root.AppendChild(element);//在element(massages)目录下添加子节点element.AppendChild (element01);//再在element(massages)目录下添加一个子节点element.AppendChild (element02);//保存生成真正的文档doc.Save (path);//刷新视图#if UNITY_EDITORAssetDatabase.Refresh();#endif}}/// <summary>/// 解析XML/// </summary>void LoadXML(){if (!File.Exists(path)){return;}//创建一个xml的对象XmlDocument doc = new XmlDocument();//会下载path路径下的xml文件(获得),此时doc = pathdoc.Load (path);//得到objects底下的所有子节点.SelectSingleNode是获得所有子节点XmlNodeList xmlNodeList = doc.SelectSingleNode("objects").ChildNodes;//遍历xmlNodeList的所有的子节点,(也就一个massages)foreach (XmlElement xe_01 in xmlNodeList) {//如果遍历到的massages的id = 1101if (xe_01.GetAttribute("id").Equals("1101")) {//继续遍历id是1101的节点(massages)下的子节点foreach (XmlElement xe_02 in xe_01.ChildNodes) {//得到name是The1的节点里面的内容,放到ArrayList中if (xe_02.GetAttribute("name").Equals("The1")) {ALThe1.Add (xe_02.GetAttribute ("name") + ":" + xe_02.InnerText);print ("ALThe1添加了:" + xe_02.GetAttribute ("name") + ":" + xe_02.InnerText);}//得到name是The2的节点里面的内容,放到另一个ArrayList中if (xe_02.GetAttribute("name").Equals("The2")) {ALThe2.Add (xe_02.GetAttribute ("name") + ":" + xe_02.InnerText);print ("ALThe2添加了:" + xe_02.GetAttribute("name") + ":" + xe_02.InnerText);}}}}}/// <summary>/// 更新/// </summary>void UpdataXML(){if (!File.Exists (path)) {print ("文件不存在");return;} XmlDocument doc = new XmlDocument ();doc.Load (path);//得到objects地下所有的节点XmlNodeList xmlNodeList = doc.SelectSingleNode ("objects").ChildNodes;foreach (XmlElement xe_01 in xmlNodeList) {if (xe_01.GetAttribute("id").Equals("1101")) {xe_01.SetAttribute ("id","1010");foreach (XmlElement xe_02 in xe_01.ChildNodes) {if (xe_02.GetAttribute("name") == "The2") {//将missions的属性改成The3;xe_02.SetAttribute("name","The3");//更改内容xe_02.InnerText = "没想到一觉醒来,什么事都忘了";}}}}//保存刷新doc.Save (path);#if UNITY_EDITORAssetDatabase.Refresh();#endif}/// <summary>/// 添加/// </summary>void AddXML(){if (!File.Exists (path)) {print ("文件不存在");} else {XmlDocument doc = new XmlDocument ();doc.Load (path);XmlNode root = doc.SelectSingleNode ("objects");//XmlElement element = doc.CreateElement("messages");element.SetAttribute ("id", "1002");XmlElement element_1 = doc.CreateElement ("contents_01");element_1.SetAttribute ("name", "The4");//设置子节点里面的内容element_1.InnerText = "啊!头好疼";XmlElement element_2 = doc.CreateElement ("contents_03");element_2.SetAttribute ("name","The5");element_2.InnerText = "我想起来了,没想到是他!";root.AppendChild (element);element.AppendChild (element_1);element.AppendChild (element_2);doc.Save (path);}}}


0 0
原创粉丝点击