原文链接: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>