关于Unity读取XML的简单学习

本文介绍了一个Unity中的XML操作类MyXML,演示了如何使用C#在Unity环境中创建、更新、添加及删除XML文件,并展示了如何读取XML文件内容。

本文转自 宣雨松 的博客   http://www.xuanyusong.com/archives/1901



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

public class MyXML : MonoBehaviour {

    public void CreatXml()
    {
        //保存XML的路径,注意路径
        string filePath = Application.dataPath + @"/";
        //判断当前路径下是否有该文件
        if (!File.Exists(filePath))
        {
            //创建XML文档实例
            XmlDocument xmlDoc = new XmlDocument();
            //创建root节点,也就是最上层节点
            XmlElement root = xmlDoc.CreateElement("transforms");
            //继续创建下一个节点
            XmlElement elmNew = xmlDoc.CreateElement("rotation");
            //设置节点的两个参数 ID和NAME
            elmNew.SetAttribute("id", "0");
            elmNew.SetAttribute("name", "eagle");

            //继续创建下一层节点
            XmlElement rotation_X = xmlDoc.CreateElement("x");
            //设置节点中的数值
            rotation_X.InnerText = "0";
            XmlElement rotation_Y = xmlDoc.CreateElement("y");
            rotation_Y.InnerText = "1";
            XmlElement rotation_Z = xmlDoc.CreateElement("z");
            rotation_Z.InnerText = "2";

            //这里在添加一个节点属性,用来区分。。
            rotation_Z.SetAttribute("id", "1");

            //把节点一层层的添加至xmlDoc中,它们之间的先后顺序,这个就是生成XML文件的顺序
            elmNew.AppendChild(rotation_X);
            elmNew.AppendChild(rotation_Y);
            elmNew.AppendChild(rotation_Z);
            root.AppendChild(elmNew);
            xmlDoc.AppendChild (root);
            //把XML保存至路径文件中
            xmlDoc.Save(filePath);
            Debug.Log("成功创建");
        }
    }

    public void UpdateXml()
    {
        string filePath = Application.dataPath + @"/";
        if (File.Exists(filePath))
        {
            XmlDocument xmlDoc = new XmlDocument();
            //根据路径把XML文件读出来
            xmlDoc.Load(filePath);
            //得到transform下的所有节点
            XmlNodeList nodeList = xmlDoc.SelectSingleNode("transform").ChildNodes;
            //遍历所有子节点
            foreach (XmlElement  xe in nodeList )
            {
                //拿到节点中属性ID=0的节点
                if (xe.GetAttribute("id") == "0")
                {
                    //更新节点属性
                    xe.SetAttribute("id", "1000");
                    //继续遍历
                    foreach (XmlElement  xl in xe.ChildNodes )
                    {

                        if (xl.Name == "z")
                            xl.InnerText = "update0000"; //这里是修改节点名称对应的数值,而上面的拿到节点连带的属性。
                    }
                    break;
                }
            }
            xmlDoc.Save(filePath);
            Debug.Log("完成更新");
        }
    }

    public void AddXml()
    {
        string filepath = Application.dataPath + @"/";
        if (File.Exists(filepath))
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(filepath);
            XmlNode root = xmlDoc.SelectSingleNode("transforms");
            XmlElement elmNew = xmlDoc.CreateElement("rotation");
            elmNew.SetAttribute("id", "1");
            elmNew.SetAttribute("name", "赖张殷");

            XmlElement rotation_X = xmlDoc.CreateElement("x");
            rotation_X.InnerText = "0";
            rotation_X.SetAttribute("id", "1");
            XmlElement rotation_Y = xmlDoc.CreateElement("y");
            rotation_Y.InnerText = "1";
            XmlElement rotation_Z = xmlDoc.CreateElement("z");
            rotation_Z.InnerText = "2";

            elmNew.AppendChild(rotation_X);
            elmNew.AppendChild(rotation_Y);
            elmNew.AppendChild(rotation_Z);
            root.AppendChild(elmNew);
            xmlDoc.AppendChild(root);
            xmlDoc.Save(filepath);
            Debug.Log("加载完成");
        }
    }

    public void DeleteXml()
    {
        string filePath = Application.dataPath + @"/";
        if (File.Exists(filePath))
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(filePath);
            XmlNodeList nodeList = xmlDoc.SelectSingleNode("transform").ChildNodes;
            foreach (XmlElement  xe in nodeList )
            {
                if (xe.GetAttribute("id") == "1")
                {
                    xe.RemoveAttribute("id");
                }
                foreach (XmlElement  xl in xe.ChildNodes )
                {
                    if (xl.Name == "z")
                        xl.RemoveAll();
                }
            }
            xmlDoc.Save(filePath);
            Debug.Log("完成删除");
        }
    }

    public void ShowXml()
    {
        string filePath = Application.dataPath + @"/";
        if (File.Exists(filePath))
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(filePath);
            XmlNodeList nodeList = xmlDoc.SelectSingleNode("transform").ChildNodes;
            //遍历每一个节点,拿节点的属性以及节点的内容
            foreach (XmlElement  xe in nodeList )
            {
                Debug.Log("Attribute" + xe.GetAttribute("name"));
                Debug.Log("NAME" + xe.Name);
                foreach (XmlElement  xl in xe.ChildNodes )
                {
                    if (xl.Name == "y")
                        Debug.Log("VALUE:" + xl.InnerText);
                }
            }
            Debug.Log("ALL=" + xmlDoc.OuterXml);
        }

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值