Unity之XML的学习总结:

1.  XML:

★XML格式:

  

    StringValue

  

解析:

Alarm(元素节点);lock(属性节点);Time(元素节点)StringValue(文本节点)

元素节点(Element):Alarm,Time

节点(Node):Alarm,lock,Time,StringValue

★XML继承结构:

System.Object

 System.Xml.XmlNode(表示XML节点)

  System.Xml.XmlDocument(表示XML文档)

   System.Xml.XmlAttribute(表示XML属性)

    System.Xml.XmlLikedNode

     System.Xml.XmlElement(表示XML元素)

★XML常用类:

XmlAttribute——XML属性类

XmlNode——XML节点类

☆InnerText:获取或设置节点及其所有子节点的值。(仅元素节点拥有)

☆Value:获取或设置节点的值(仅属性节点拥有)

☆AppendChild:将指定的节点添加到该节点的子节点列表的末尾

☆ChildNodes:获取节点的所有子节点

☆FirstChild:获取节点的第一个子节点

☆HasChildNodes:判断该节点是否有任何子节点

☆InnerText:获取或设置节点及其所有子节点值

☆SelectSingleNode:选择第一个XmlNode

XmlDocument——XML文件夹

☆CreateXmlDeclaration:创建一个具有指定值的XmlDeclaration节点

☆CreateElement:创建具有指定名称的元素

☆CreateNode:创建具有指定的节点类型、Name和NamespaceURI和XmlNode

☆AppendChild:将指定的节点添加到该节点的子节点列表末尾(继承自XmlNode)

☆Load:从指定的URL加载XML文档

☆LoadXml:从指定的字符串加载XML文档

☆Save:将XML文档保存到指定的文件夹。

:XmlElement: ——XML元素类

☆SetAttribute:设置指定名称的特性的值

☆HasAttribute:判断该元素节点是否具有属性

☆GetAttribute:返回具有指定名称的属性值

★XML数据生成步骤:(Unity引擎)

第一步:引用C#的命名空间System.Xml

第二步:生成XML文档(XmlDocument)

第三步:生成根元素(XmlElement类)添加给文档对象

第四步:循环生成子元素添加给父元素

第五步:将生成的XML文档保存

★实例:

C#脚本:

#region 用到的函数
    /* Application:访问应用程序运行时数据。
     * dataPath:包含游戏数据文件夹的路径(只读)。
     * File.Exists(string path):判断是文件路径是否存在
     * .CreateXmlDeclaration(string version,string encoding,string standalone):  创建声明某文档
     * .SelectNodes(选择某节点所有子节点元素)
     * .SelectSingleNode().ChildNode (选择某个节点).(子节点元素)
     * XmlDocument: xml文档
     * XmlNode : xml节点
     * XmlElement:xml元素
     * .CreateElement(strin name) : 创建xml元素
     * .SetAttribute(string name,string value) :写属性
     * ApendChild(XmlNode NewChild):添加孩子
     * .InnerText{get;set;}  : (属性)string类型。 某元素.文本节点
     * AsseteDatabase.Refresh();   :   更新 资源数据库
     * .Save(path);   保存某文档;
     * .Load(path);   得到(加载)某文档
     * XmlNodeList  :节点列表
     * .Equals(string value)  某值等于value  等同于 == 
     */
#endregion
/*************************
 * Title:	""
 *
 * Function:
 *          
 * Author:	v.
 * Date:	2018.
 * Version:	1.0
 * Description:
 * 
 *************************/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Xml;
#if UNITY_EDITOR
using UnityEditor;
#endif

public class Data_XML : MonoBehaviour
{

    private string path;

    void Start()
    { 
        path = Application.dataPath + "/1.XML/XMLData/ChatData.xml";
    }//end_Start

    void Update()
    {

        if (Input.GetKeyDown(KeyCode.A))
        {
            CreateXML();   
        }
        if (Input.GetKeyDown(KeyCode.B))
        {
            AddXML();
        }
        if (Input.GetKeyDown(KeyCode.C))
        {
            UpDataXML();
        }

    }//end_Update
    /// 
    /// 创建XML
    /// 
    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("object");
            //将根节点添加到xml当中
            doc.AppendChild(root);
            //创建子节点
            XmlElement element01 = doc.CreateElement("message");
            //给子节点设置属性
            element01.SetAttribute("id", "1001");
            //添加到根节点中
            root.AppendChild(element01);
            //创建子节点0101
            XmlElement element0101 = doc.CreateElement("content");
            //给子节点0101添加元素属性
            element0101.SetAttribute("name", "The1");
            //001添加文本节点
            element0101.InnerText = "嗨,少年,你醒了吗?";
            //将子节点添加到01节点当中
            element01.AppendChild(element0101);
            ////给子节点添加文本节点
            //element01.InnerText = "";
            //创建子节点0102....
            XmlElement element0102 = doc.CreateElement("mission");
            element0102.SetAttribute("name", "The2");
            element0102.InnerText = "我是谁,我在哪里?";
            element01.AppendChild(element0102);

            //保存成一个真正的文档
            doc.Save(path);
#if UNITY_EDITOR
            AssetDatabase.Refresh();
#endif
        }
        else
        {
            print("文件已存在");
        }

    }
    /// 
    /// 添加
    /// 
    void AddXML()
    {
#if UNITY_EDITOR
        AssetDatabase.Refresh();
#endif

        if (!File.Exists(path))
        {
            return;
        }
        else
        {
            XmlDocument doc = new XmlDocument();
            //加载指定路径的xml文件
            doc.Load(path);
            //找到根节点
            XmlNode root=doc.SelectSingleNode("object");
            XmlElement e = doc.CreateElement("message01");
            e.SetAttribute("id","1002");
            root.AppendChild(e);
            XmlElement e1 = doc.CreateElement("content01");
            e1.SetAttribute("name","The3");
            e1.InnerText = "啊,头好疼";
            e.AppendChild(e1);
            XmlElement e2 = doc.CreateElement("content02");
            e2.SetAttribute("name","The4");
            e2.InnerText = "想起来了,是他把我推下了悬崖";
            e.AppendChild(e2);
            doc.Save(path);
#if UNITY_EDITOR
            AssetDatabase.Refresh();
#endif

        }
    }
    /// 
    /// 更新
    /// 
    void UpDataXML()
    {
       
        if (!File.Exists(path))
        {
            return;
        }
        XmlDocument doc = new XmlDocument();
        doc.Load(path);
        //得到object里所有的子节点
        //XmlNodeList xmlNodes = doc.SelectNodes("object");
        XmlNodeList xmlNode = doc.SelectSingleNode("object").ChildNodes;
        foreach (XmlElement xe in xmlNode)
        {
            
            if (xe.GetAttribute("id") == "1001")
            {
                xe.SetAttribute("id","1010");
                foreach (XmlElement xe01 in xe.ChildNodes)
                {
                    if (xe01.GetAttribute("name").Equals("The2"))
                    {
                        xe01.InnerText="没想到一觉醒来,以前的事情都忘了";
                    }
                }
            }
        }
        doc.Save(path);

    }
    /// 
    /// 读取
    /// 
    void ReadXML()
    {
        if (!File.Exists(path))
        {
            return;
        }
        //创建集合
        ArrayList al01 = new ArrayList();
        ArrayList al02 = new ArrayList();
        XmlDocument doc = new XmlDocument();
        //得到xml文件
        doc.Load(path);
        //得到根节点下所有的子节点
        XmlNodeList nodes = doc.SelectSingleNode("object").ChildNodes;
        //遍历所有的子节点
        foreach (XmlElement ex in nodes)
        {
            if (ex.GetAttribute("id").Equals("1001"))
            {
                foreach (XmlElement ex01 in ex.ChildNodes)
                {
                    if (ex01.Name == "contents")
                    {
                        al01.Add(ex01.GetAttribute("name")+":"+ex01.InnerText);
                        print(al01[0]);
                    }
                    if (ex01.GetAttribute("name") == "The2")
                    {
                        al02.Add(ex01.GetAttribute("name") + ":" + ex01.InnerText);
                        print(al02[0]);
                    }
                }
            }
        }


    }
}
    
脚本运行后的XML文档


  
    嗨,少年,你醒了吗?
    没想到一觉醒来,以前的事情都忘了
  
  
    啊,头好疼
    想起来了,是他把我推下了悬崖
  
  
    啊,头好疼
    想起来了,是他把我推下了悬崖
  

你可能感兴趣的:(Unity3D,C#)