[Unity基础]xml在unity中的使用

原文链接:http://www.xuanyusong.com/archives/1901


XmlDocument:CreateElement(创建节点)、AppendChild(添加节点,使被添加的节点成为子节点)、Save(保存xml文件)、Load(读取xml文件)、

SelectSingleNode(拿到特定名称的节点)


XmlElement:SetAttribute(设置节点属性)、InnerText(设置节点内容)、AppendChild(添加节点,使被添加的节点成为子节点)、

GetAttribute(拿到节点属性)、RemoveAttribute、RemoveAll


通用:ChildNodes(拿到所有子节点,但不包含子节点里的子节点)


0.引用头文件

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

1.生成xml
public void createXml()
	{
               //xml保存的路径,这里放在Assets路径 注意路径。
		string filepath = Application.dataPath + @"/my.xml";
               //继续判断当前路径下是否有该文件
		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","momo");
		       //继续创建下一层节点
        	     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("createXml OK!");
		}
	}


运行结果
<transforms>
  <rotation id="0" name="momo">
    <x>0</x>
    <y>1</y>
    <z id="1">2</z>
  </rotation>
</transforms>

2.更新xml文件
public void UpdateXml()
	{
		string filepath = Application.dataPath + @"/my.xml";
		if(File.Exists (filepath))
		{
			 XmlDocument xmlDoc = new XmlDocument();
                         //根据路径将XML读取出来
			 xmlDoc.Load(filepath);
                         //得到transforms下的所有子节点
			 XmlNodeList nodeList=xmlDoc.SelectSingleNode("transforms").ChildNodes;
                         //遍历所有子节点
			 foreach(XmlElement xe in nodeList)
			 {
                                //拿到节点中属性ID =0的节点
				if(xe.GetAttribute("id")=="0")
				{
                                        //更新节点属性
					xe.SetAttribute("id","1000");
                                        //继续遍历
					foreach(XmlElement x1 in xe.ChildNodes)
					{
						if(x1.Name=="z")
						{
                                                        //这里是修改节点名称对应的数值,而上面的拿到节点连带的属性。。。
							 x1.InnerText="update00000";
						}
 
					}
					break;
				}
			 }
			 xmlDoc.Save(filepath);
			 Debug.Log("UpdateXml OK!");
		}
 
	}


运行结果
<transforms>
  <rotation id="1000" name="momo">
    <x>0</x>
    <y>1</y>
    <z id="1">update00000</z>
  </rotation>
</transforms>

3.添加xml
public void AddXml()
	{
		string filepath = Application.dataPath + @"/my.xml";
		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","yusong");
 
        	 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("AddXml OK!");
		}
	}

运行结果
<transforms>
  <rotation id="1000" name="momo">
    <x>0</x>
    <y>1</y>
    <z id="1">update00000</z>
  </rotation>
  <rotation id="1" name="yusong">
    <x id="1">0</x>
    <y>1</y>
    <z>2</z>
  </rotation>
</transforms>

4.删除xml
public void deleteXml()
	{
		string filepath = Application.dataPath + @"/my.xml";
		if(File.Exists (filepath))
		{
			 XmlDocument xmlDoc = new XmlDocument();
			 xmlDoc.Load(filepath);
			 XmlNodeList nodeList=xmlDoc.SelectSingleNode("transforms").ChildNodes;
			 foreach(XmlElement xe in nodeList)
			 {
				if(xe.GetAttribute("id")=="1")
				{
					xe.RemoveAttribute("id");
				}
 
				foreach(XmlElement x1 in xe.ChildNodes)
				{
					if(x1.Name == "z")
					{
						x1.RemoveAll();
 
					}
				}
			 }
			 xmlDoc.Save(filepath);
			 Debug.Log("deleteXml OK!");
		}
 
	}

运行结果
<transforms>
  <rotation id="1000" name="momo">
    <x>0</x>
    <y>1</y>
    <z>
    </z>
  </rotation>
  <rotation name="yusong">
    <x id="1">0</x>
    <y>1</y>
    <z>
    </z>
  </rotation>
</transforms>

相关文章

引言 NOKIA 有句著名的广告语:“科技以人为本”。任何技术都是为了满足人的生产生活需要而产生的。具体...
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want. 文章...
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want. 文章...
http://blog.jobbole.com/79252/ 引言 NOKIA 有句著名的广告语:“科技以人为本”。任何技术都是为了满...
(点击上方公众号,可快速关注) 公众号:smart_android 作者:耿广龙|loonggg 点击“阅读原文”,可查看...
一、xml与xslt 相信所有人对xml都不陌生,其被广泛的应用于数据数据传输、保存与序列化中,是一种极为强...